HI retard; sans em> l'utilisateur ayant pour fermer la boîte de dialogue? p>
3 Réponses :
Oui - Bien sûr que vous pouvez. Avez-vous essayé de planifier une fermeture?
JFrame f = new JFrame(); final JDialog dialog = new JDialog(f, "Test", true); //Must schedule the close before the dialog becomes visible ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor(); s.schedule(new Runnable() { public void run() { dialog.setVisible(false); //should be invoked on the EDT dialog.dispose(); } }, 20, TimeUnit.SECONDS); dialog.setVisible(true); // if modal, application will pause here System.out.println("Dialog closed");
Vous devez appeler dialog.setVisisble (FALSE) sur le thread d'expédition de l'événement. Sinon, le comportement du code est imprévisible.
C'est très vrai - j'ai omis ceci pour des raisons de confusion
J'utiliserais une minuterie pivotante. Lorsque la minuterie incendie, le code sera exécuté dans le fil d'expédition d'événement automatiquement et toutes les mises à jour de l'interface graphique doivent être effectuées dans l'EDT. P>
Lire la section du tutoriel de swing sur Comment utiliser les minuteries < / a>. p>
Cette solution est basée sur Oxbow_Lakes ', mais il utilise un javax.swing.Timer, destiné à ce type de chose. Il exécute toujours son code sur le fil d'expédition d'événement. Il est important d'éviter des bugs subtils mais désagréables