Modifier l'interface graphique sans la bloquer

Soyez le premier à donner votre avis sur cette source.

Vue 2 301 fois - Téléchargée 412 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

Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87 -
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
tarek_dotzero
Messages postés
811
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
9 octobre 2019
> Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
-
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.