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