Modifier l'interface graphique sans la bloquer

1/5 (2 avis)

Vue 3 454 fois - Téléchargée 565 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
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022
30 avril 2017 à 00:29
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
Twinuts Messages postés 5374 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 3 mars 2023 111
Modifié le 14 avril 2017 à 10:21
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

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.