Bonjour,
le but de ma classe Demarrer4 est d'afficher deux bouton (Démarrer, Arrêter) dans une fenêtre. Si on clique sur démarre la music se lance et si on clique sur arrêter la musique s'arrête. En parallèle je fais afficher un texte défilant en haut a gauche de la fenêtre afin de m'assurer que le thread continue de tourner.
La version que je vous donne en exemple, lance la musique mais impossible de l'arrêter et si on reclique sur démarrer on lance une deuxième musique qui vient se superposer sur la première etc .... De plus le texte ne défile pas.
Si je mets en commentaire la ligne
this.musique.run();
je n'ai plus de musique (normale) et le texte défile bien et s'arrête quand on clique sur arrêter et redémarre quand on clique sur démarrer.
Je vous remercie de votre aide , car après des heures de recherches je n'y arrive pas.
Merci pour vos réponses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 package othello; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Demarrer4 extends JFrame implements ActionListener{ protected JButton demarrer = new JButton("Démarrer"); protected JButton arreter = new JButton("Arrêter"); protected JLabel message = new JLabel("Message Test"); protected JPanel panel = new JPanel(new FlowLayout()); protected volatile boolean running = false; protected AePlayWave playWaveMusic=new AePlayWave("musique.wav"); protected int nbThreads=0; public Demarrer4(){ setTitle("Message"); this.setSize(200, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout(1,2)); panel.add(demarrer); panel.add(arreter); this.add(message, BorderLayout.NORTH); this.add(panel, BorderLayout.SOUTH); demarrer.addActionListener(this); arreter.addActionListener(this); this.setVisible(true); } public void actionPerformed(java.awt.event.ActionEvent event) { Object source = event.getSource(); if(source == demarrer) { running = true; Thread thread = new Thread(new MonRunnable(playWaveMusic)); thread.start(); nbThreads++; System.out.println("Nombre de threads = "+nbThreads); System.out.println("ID thread = "+thread.getId()); } else if(source == arreter) { //cancel(); running = false; //this.playWaveMusic.interrupt(); //thread.suspend(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 class MonRunnable extends Thread implements Runnable { AePlayWave musique; public MonRunnable(AePlayWave music) { this.musique = music; } public void cancel() { // interruption du thread courant, c'est-à-dire le nôtre Thread.currentThread().interrupt() ; } public void run() { while (running){ try{ //if (!musique.isAlive()) musique.start(); //System.out.println("running = "+running); String texte = message.getText(); String debut = texte.substring(0, texte.length()-1); String fin = texte.substring(texte.length()-1); texte = fin+debut; message.setText(texte); this.musique.run(); Thread.sleep(100); }catch (InterruptedException e) { running = false; this.musique.interrupt(); this.cancel(); //Thread.currentThread().interrupted() ; } } } } public static void main(String[] args) { // TODO Auto-generated method stub Demarrer4 action = new Demarrer4(); } }
Partager