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   -
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 :
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:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 :

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();
0