JFrame et Thread
khalil-kt
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
salut,
je développe sous java, programme qui commence par un Compte à rebours de 1 à 3(affiche dans un JLabel), j'ai essayer se code :
mais la fenêtre reste gelée puis elle affiche directement 3
je développe sous java, programme qui commence par un Compte à rebours de 1 à 3(affiche dans un JLabel), j'ai essayer se code :
for(int i = 0; i <= 3 ; i = i + 1 ){ compteARebour.setText(Integer.toString(i)); Thread.sleep(1000); }
mais la fenêtre reste gelée puis elle affiche directement 3
A voir également:
- Exception in thread "main" java.awt.illegalcomponentstateexception: contentpane cannot be set to null.
- Qwerty to azerty - Guide
- Deco in paris avis ✓ - Forum Consommation & Internet
- Navigation in private - Guide
- Decoinparis ⚠️ arnaque ✓ - Forum Consommation & Internet
- Déco in paris site fiable ???? - Forum Consommation & Internet
1 réponse
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();