Bonjour,
J'ai écrit un programme java dans lequel je fais un certain nombre de calculs qui peuvent prendre du temps.
Du coup, le temps des calculs, je "disable" mon interface et j'affiche une fenêtre modal "dialogWIP" que je ferme et je "enable" l'interface quand le calcul est fini.
Ca fonctionne, sauf que parfois, si le calcul est très rapide, ma fenêtre ne se ferme pas, par contre mon interface se met bien en "enable".
Je fais les affichage dans l'EDT mais on dirait qu'il se mélange les pinceaux et qu'il n’exécute pas les ordres dans l'ordre.
Voici mon code
J'ai trouvé une parade en faisant une "pause" de 1 seconde avant de rendre la main dans le cas ou le calcul serait trop rapide, mais bon c'est pas terrible comme solution.
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 jControleur = new ControleAppli(); jControleur.start(); protected class ControleAppli extends Thread { JOptionPane messagePane = new JOptionPane("Work in progress, please wait...", JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null); JDialog dialogWIP = messagePane.createDialog(null, "Processing"); public void run() { SwingUtilities.invokeLater(new Runnable() { public void run() { // disable interface dialogWIP.setVisible(true); } }); // je fais les calculs SwingUtilities.invokeLater(new Runnable() { public void run() { // enable interface dialogWIP.setVisible(false); } }); } }
Pourquoi ça fait cela ?
Merci de votre aide.
Partager