JFrame et Thread

khalil-kt Messages postés 17 Statut Membre -  
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 :
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 19031 Statut Modérateur 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