Bonjour,
J'ai écrit une petite applet pour piloter des simulations.
La simulation tourne dans un thread, et les résultats s'affichent en temps réel dans l'applet. Le panneau de l'applet contient aussi une barre de boutons pour piloter la simulation (run/pause).
J'ai essayé de respecter les principes de l'EDT mais manifestement c'est raté puisque lorsque je resize la fenêtre de l'applet, il arrive que la barre de boutons disparaisse.
Voilà le code de l'applet:
et voilà le code de la methode run() de la simulation:
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 public class Laboratory extends JApplet { /** simulation */ private Simulation simulation; /** buttonBar */ private ButtonBar buttonBar; /** a flag that indicates whether or not the simulation is paused */ private boolean pause =true; /** * Initializes the applet. */ public void init() { simulation = new Simulation(this) ; try { javax.swing.SwingUtilities.invokeAndWait(new Runnable() { public void run() { buttonBar = new ButtonBar(Laboratory.this) ; Laboratory.this.getContentPane().add( buttonBar, "South" ); Laboratory.this.getContentPane().add( simulation.getNewJTabbedPane() ); } }); } catch (Exception e) { System.err.println("createGUI didn't successfully complete"); throw new RuntimeException(); } pause(true); simulation.start(); } /** * @return a flag that indicates whether or not the applet is paused. */ public boolean isPaused() { return this.pause; } /** * @param b a boolean. */ void pause(boolean b) { this.pause =b; this.buttonBar.setPause(b); } }
Votre aide sera la bienvenue.
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 /** * Runs the simulation. */ public void run() { while (true) { if (!laboratory.isPaused()) { model = new ModelState(model); SwingUtilities.invokeLater(new Runnable(){ public void run(){ matrixPane.setText(model.getBalanceSheetMatrix()); consoleText.append(model.toString()+"\n"); } }); try { Thread.sleep(50); } catch (InterruptedException e) {} } else try { Thread.sleep(250); } catch (InterruptedException e) {} } }






Répondre avec citation




Partager