Bonjour,
J'ai d'un côté un SwingWorker et de l'autre une classe "CompletionWaiter" qui affiche une progressbar dans un JDialog modal si le traitement du sw dure plus de 2 secondes.
Dans la méthode done() d'un swingworker j'ai un JOptionPane qui indique que le traitement du swingworker est terminé.
Le "CompletionWorker" écoute les events du swingworker:
- Au démarrage, elle lance un timer (java.util.Timer) qui ouvrira la fenêtre.
- A la fin du swingworker, le timer est arrêté s'il tourne encore. S'il est finit, la classe ferme la JDialog.
Le mécanisme fonctionne dans tous les cas (timer terminé avant swingworker, swingworker.doInBackground() terminé avant timer), sauf dans le cas limite où le doInBackground() du SwingWorker se termine quasi en même temps que le timer.
Dans ce cas, la JOptionPane du done() s'ouvre, puis le JDialog de la progressbar, qui tourne infiniment.
Au niveau des events, ma classe "CompletionWaiter" ne reçoit pas l'event de fin du swingworker, avec comme conséquence qu'il ne sait pas qu'il doit fermer pas la dialogbox.
Par contre si je mets cette dialogbox en non modal, alors cela fonctionne.
J'ai du mal à comprendre en quoi le fait que cette dialogbox soit modale ou pas interfère avec le processus, ni exactement le rôle que joue la JoptionPane du done() dans le problème.
Est-ce que vous avez une idée ?
Partager