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

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