Modifier l'interface graphique sans la bloquer

Soyez le premier à donner votre avis sur cette source.

Vue 2 629 fois - Téléchargée 476 fois

Description

Mettre à jour l'interface graphique d'une application suivant l'état d'avancement d'un traitement est une chose très fréquente. Néanmoins, lancer le traitement dans le même Thread que l'interface graphique peut provoquer le blocage de cette dernière durant le traitement.
La solution réside dans l'utilisation d'un autre Thread pour le traitement et la mise à jour de l'interface se fait en recevant des messages de ce deuxième Thread.
Pour montrer cette solution, un exemple très simple est donné dans ce code. Un compte à rebours utilise la fonction Thread.sleep() qui est une fonction bloquante. Pour ne pas bloquer l'interface graphique, le compteur est lancé dans un Thread séparé. L'interface graphique se mis à jour à chaque fois qu'elle reçoit un message du compteur. En même temps, l'utilisateur peut vérifier que l'interface n'est pas bloquée et permet de lancer un autre traitement (dans cet exemple : l'affichage d'un simple message "Hello, World !").

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
97
Bonjour,

Les traitements d'une interface SWING ne devraient pas être faits par la classe Thread mais par SwingWorker qui est fait pour ça.
Voir doc SwingWorker
Messages postés
814
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
17 avril 2020
>
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020

Merci pour le conseil, je ne connaissais pas cette classe.
On la voyant, je pense que, pour être plus précis, l'interface est toujours modifiée par un Thread séparé, sauf que c'est déjà écrit vu que SwingWorker est un Runnable.

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/swing/SwingWorker.java

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.