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
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);
                        }
                    });
        }
    }
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.

Pourquoi ça fait cela ?
Merci de votre aide.