Devrions-nous utiliser EventQueue.invokeLater pour la mise à jour de l'interface graphique en Java de l'application de bureau?
Je sais qu'en utilisant cette méthode, l'exécutable paramètre est soumis au système de EventQueue.
Mais doit tous les GUI des mises à jour sont effectuées à l'aide de cette méthode? Je veux dire, si j'ai envie de dire, de modifier un texte de JButton, dois-je utiliser quelque chose comme ceci:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
jButton1.setText("changed text");
}
});
Si je dois utiliser cette approche, tout modèle, nous pouvons utiliser pour éviter ce code répétitif?
Remarque: lent, le code doit y aller aussi pour garder swing sensible
Si aucune des réponses ci-dessous les réponses à votre question, pourriez-vous marquer comme réponse?
Si aucune des réponses ci-dessous les réponses à votre question, pourriez-vous marquer comme réponse?
OriginalL'auteur nash | 2010-08-22
Vous devez vous connecter pour publier un commentaire.
Vous avez seulement besoin d'utiliser
invokeLater
lorsque vous souhaitez mettre à jour votre INTERFACE utilisateur à partir d'un autre thread qui n'est pas le thread d'INTERFACE utilisateur (event dispatch thread).Supposons que vous disposez d'un gestionnaire pour un bouton de la souris et vous voulez changer le texte d'une étiquette lorsque quelqu'un clique sur le bouton. Il est tout enregistrer pour enregistrer le texte de l'étiquette directement. Cela est possible parce que le gestionnaire de l'événement de clic de bouton s'exécute dans le thread de l'INTERFACE utilisateur.
Supposons, cependant, que sur un autre bouton-cliquez sur commencer un autre thread qui effectue des travaux, et après ce travail est terminé, vous souhaitez mettre à jour l'INTERFACE utilisateur. Ensuite, vous utilisez
invokeLater
. Cette méthode garantit que votre INTERFACE utilisateur mise à jour est exécutée dans le thread de l'INTERFACE utilisateur.Donc, dans beaucoup de cas, vous n'avez pas besoin
invokeLater
, vous pouvez simplement faire de l'INTERFACE utilisateur des mises à jour directement. Si vous n'êtes pas sûr, vous pouvez utiliserisDispatchThread
pour vérifier si votre code est en cours d'exécution à l'intérieur de l'event dispatch thread.C'est correct. J'ai ajouté quelques infos à propos de cette méthode à ma réponse.
Mais il n'y a toujours pas de raccourci? Je vous l'avez aimé un raccourci ou une macro pour le passe-partout (si isDispatchThread faire X, autrement envelopper X et pend.). Venant de Delphi, je tiens à appeler l'ensemble de la chose
Sync( x(a,b,c) )
mais je suppose qu'avec java syntaxe la syntaxe java, lepublic void {}
choses est inévitable. C'est drôle pour moi que je dois trouver moi-même qui souhaitent pour le style C macros pour éviter d'écrire du Java comme il est conçu pour être écrite.OriginalL'auteur Ronald Wildenberg
Vous besoin de faire cela que si vous n'êtes pas déjà sur l'event dispatch thread. Sauf si vous avez commencé à créer de nouvelles discussions ou d'exécution de code à partir du thread principal tout votre code probablement déjà s'exécute à partir de l'event dispatch thread qui inutiles. Par exemple, tous les UI gestionnaires d'événements sont appelés sur l'event dispatch thread afin que vous n'auriez pas besoin de le faire pour le code appelé à partir de là.
OriginalL'auteur Ramon
Au lieu de vraiment éviter "répétitive" (java gens seraient probablement dire, un code lisible sans beaucoup de secrets), vous pouvez utiliser Eclipse de la fonctionnalité de modèles. je l'ai mis à élargir les deux lettres "il" pour le bloc suivant:
Apparemment file d'attente d'envoi de ce design n'est pas seulement recommandé, il est fondamentalement nécessaire. C'est peut-être le plus bruyant, j'ai jamais vu dans n'importe quelle langue de pousser un lambda dans une file d'attente de messages. Mais il est là. C'est java. Et en Java de la défense, il est certainement évident à partir de ci-dessus exactement ce qu'il se passe. Je ne resent le montant de frappe, mais la seule chose à laquelle je pense, qui permettrait d'éviter c'est les Macros du préprocesseur C, et je parie que Java les gens n'aiment pas l'aide de ceux-ci. Code d'extension à l'aide de modèles est plus lisible, de prise en charge, et n'implique pas de tout de la magie noire.
pouvez-vous expliquer pourquoi?
Je pense que vous n'avez pas le choix pour les exceptions.
OriginalL'auteur Warren P