Parce que les mises à jour de l'interface graphique doivent être effectuées dans le fil de distribution des événements. Si vous travaillez dans un autre thread, la mise à jour doit être effectuée dans le thread de distribution d'événements. invokeLater
l'arrache de votre fil et le place dans le fil de l'événement.
Plus d'explications ici : http://www.oracle.com/technetwork/java/painting-140037.html
Pour les mises à jour importantes (comme le repeuplement d'un JTable à partir de la base de données), il est judicieux, dans Swing, de récupérer le modèle sous-jacent, d'effectuer les mises à jour du modèle dans votre thread, puis de lancer une notification en utilisant invokeLater
. Cela permet à votre interface de répondre aux événements et de se redessiner. Si la mise à jour est très importante, vous pouvez même envoyer ces notifications avec la commande invokeLater
à intervalles réguliers pendant la mise à jour, toutes les secondes ou deux.
1 votes
En fait, cette méthode est précisément destinée au développeur pas de se préoccuper de la synchronisation des fils, car il suffit de faire savoir à Swing qu'il est temps de procéder à une mise à jour, et le gros du travail est effectué en coulisses.