JFrame et Thread
khalil-kt
Messages postés
17
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
- Press esc in 1 seconds to skip startup.nsh any other key to continue ✓ - Forum Windows 10
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();