Salut à tous,
Je voudrais réaliser une application basique avec 2 threads: 1 producteur, 1 consommateur.
Je lance le producteur avec un bouton Start, idem pour le consommateur.
Et j'ai un bouton Pause pour chacun.
Sans utiliser les boutons pause, ca marche nikel. Dés que je touche un bouton pause ca plante: dans la console ca marche tjrs jusqu'a la fin du programme mais sur l'applet je peux plus rien toucher et ca plante méchant.
Voici la partie de mon applet qui s'ocuppe des boutons:
Voici la partie s'occupe de la pause et resume dans le producteur (c pareil pour le consommateur):
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 public synchronized void actionPerformed(ActionEvent event) { Object source = event.getSource(); if (source == b_startCustomer) { System.out.println("b1"); newArrival.start(); } else if (source == b_pauseCustomer) { System.out.println("b2"); try { if (arrivalsPaused==false){ newArrival.pauseArrivals(); arrivalsPaused=true; }else{ newArrival.resumeArrivals(); arrivalsPaused=false; } } catch (InterruptedException e) { // TODO Bloc catch auto-généré e.printStackTrace(); } } else if (source == b_startTill) { System.out.println("b3"); newDepartures.start(); } else if (source == b_pauseTill) { System.out.println("b4"); try { if (departuresPaused==false){ newDepartures.pauseDepartures(); departuresPaused=true; }else{ newDepartures.resumeDepartures(); departuresPaused=false; } } catch (InterruptedException e) { // TODO Bloc catch auto-généré e.printStackTrace(); } }; repaint(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public synchronized void pauseArrivals() throws InterruptedException{ wait(); } public synchronized void resumeArrivals(){ notify(); }
Partager