10
votes

Puis-je définir une minuterie sur une boîte JDialog Jadialog Java pour fermer après un certain nombre de millisecondes

HI retard; sans l'utilisateur ayant pour fermer la boîte de dialogue?


0 commentaires

3 Réponses :


7
votes

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");


2 commentaires

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



3
votes

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.

Lire la section du tutoriel de swing sur Comment utiliser les minuteries < / a>.


0 commentaires

14
votes

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 xxx


0 commentaires