JFrame et Thread
Fermé
khalil-kt
Messages postés
16
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
10 juillet 2016
-
10 juil. 2016 à 16:45
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 10 juil. 2016 à 17:13
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 10 juil. 2016 à 17:13
A voir également:
- JFrame et Thread
- Thread meta - Guide
- Compte thread - Guide
- Exception in thread "main" java.awt.illegalcomponentstateexception: contentpane cannot be set to null. ✓ - Forum Programmation
- Exception in thread "javafx application thread" java.lang.nullpointerexception ✓ - Forum Java
- System thread exception not handled ✓ - Forum Windows 10
1 réponse
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
10 juil. 2016 à 17:13
10 juil. 2016 à 17:13
Bonjour,
Tu fais cela dans un Listener (par exemple en appuyant sur un bouton) ?
Il faut savoir que tant que l’événement n'est pas complètement traité (donc à la fin des 3 secondes) rien d'autre ne peut affiché.
Cela explique d'une part pourquoi les affichages intermédiaires (1 et 2) ne sont pas affichés, et d'autre part pourquoi la fenêtre freeze.
Pour t'en sortir il faut que tu exécutes une tâche de fond qui va faire les affichages secondes par secondes en parallèle du reste du programme et en particulier permettre de terminer l’événement et donc permettre de faire de nouveaux affichages.
Voir : Worker Threads and SwingWorker
Exemple :
Tu fais cela dans un Listener (par exemple en appuyant sur un bouton) ?
Il faut savoir que tant que l’événement n'est pas complètement traité (donc à la fin des 3 secondes) rien d'autre ne peut affiché.
Cela explique d'une part pourquoi les affichages intermédiaires (1 et 2) ne sont pas affichés, et d'autre part pourquoi la fenêtre freeze.
Pour t'en sortir il faut que tu exécutes une tâche de fond qui va faire les affichages secondes par secondes en parallèle du reste du programme et en particulier permettre de terminer l’événement et donc permettre de faire de nouveaux affichages.
Voir : Worker Threads and SwingWorker
Exemple :
SwingWorker worker = new SwingWorker<Void, Void>() { @Override public void doInBackground() { for (int i = 0; i <= 3 ; i++){ compteARebour.setText(Integer.toString(i)); Thread.sleep(1000); } } @Override public void done() { } }; worker.execute();