Bonjour,

Je cherche à faire une appli qui effectue une action (ce sera un envoi de commande telnet d'une chaîne de caractere à longueur défini par l'utilisateur) de manière continue, à intervalle défini, et que l'on puisse mettre en pause et relancer via 2 boutons START & STOP.

J'ai vu qu'il existait pour celà les classes TimerTask et Timer. J'arrive donc à lancer mon action (pour l'exemple je fais juste un println) mais je n'arrive pas à faire fonctionner mes boutons

Voici mon code :

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
public class Controleur{
 
	private MonTimer mt;
	private String chaine = "abcdefghijklmnopqrstuvwxyz";
 
	public Controleur() {
		String input = JOptionPane.showInputDialog("Combien de caracteres ?", 0);
		int i = Integer.parseInt(input);
		mt = new MonTimer(i,chaine);
		mt.scheduleAtFixedRate(mt.getTT(), 0, 2000);
		JFrame fenetre = new JFrame();
		JPanel panel = new JPanel();
		JButton start = new JButton("start");
		JButton stop = new JButton("stop");
		start.addActionListener(new Bouton2Listener(mt));
		stop.addActionListener(new Bouton1Listener(mt));
		panel.add(start);
		panel.add(stop);
		fenetre.setTitle("Network test");
		fenetre.setResizable(true);
		fenetre.setLocationRelativeTo(null);
		fenetre.setContentPane(panel);
		fenetre.setVisible(true);
	}
 
	public static void main(String...args){
		new Controleur();
	}
}
 
class MonTimer extends Timer{
 
	int n;
	String s;
	TimerTask task;
 
	public MonTimer(int a, String b){
		n = a;
		s = b;	
		task = new TimerTask(){		
			public void run(){
				System.out.println(s.substring(0,n));
			}
		};
	}
 
	public TimerTask getTT(){
		return task;
	}
}
 
class Bouton1Listener implements ActionListener{
 
	MonTimer timer;
 
	public Bouton1Listener(MonTimer tt){
		timer = tt;
	}
 
	public void actionPerformed(ActionEvent arg0) {
		try {
			synchronized(timer){
				timer.wait();
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
 
	}
}
 
class Bouton2Listener implements ActionListener{
 
	MonTimer timer;
 
	public Bouton2Listener(MonTimer tt){
		timer = tt;
	}
 
	public void actionPerformed(ActionEvent arg0) {
			synchronized(timer){
				timer.notify();
			}	
	}
}
D'abord, je n'avais pas mis les "synchronized" et j'avais une exception IllegalMonitorStateException au clic d'un bouton.

Maitenant, quand je clique, par exemple sur stop, le bouton reste bloqué enfoncé et ça n'a aucun impact sur mon Timer puisque j'ai toujours des println qui s'affichent...

Merci d'avance de me sortir de ce pétrin