Pourquoi utiliser SwingUtilities.invokeLater dans la méthode principale?

Après des années de programmation Java, j'ai toujours utilisé pour créer mon main() des méthodes comme celle-ci:

public static void main(String[] args) 
{
    runProgram();
}

mais récemment j'ai étudié quelques codes du Web et j'ai vu cela parfois au lieu de l'habituel main() Utiliser ci-dessus:

public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() 
        {
            runProgram();
        }
    });
}

je veux simplement savoir :

  • Pourquoi utiliser cette au lieu de l'habituel main()? Je ne vois aucune différence quand je lui donner un essai.
  • Quelle est la différence entre ces deux façons ?

merci de m'avoir lu et de vos réponses.

23
demandé sur mKorbel 2013-03-08 23:47:41

3 réponses

les docs expliquent pourquoi. À partir de Threads Initiaux

pourquoi le fil initial ne crée-t-il pas simplement L'interface graphique elle-même? Parce que presque tout le code qui crée ou interagit avec les composants Swing doit fonctionner sur le thread event dispatch.

et The Event Dispatch Thread

certaines méthodes de composants Swing sont étiquetées "thread safe" dans la spécification de L'API; elles peuvent être invoquées en toute sécurité à partir de n'importe quel fil. toutes les autres méthodes des composants Swing doivent être invoquées à partir du thread event dispatch. Les programmes qui ignorent cette règle peut fonctionner correctement la plupart du temps, mais sont sujettes à des erreurs imprévisibles qui sont difficiles à reproduire.

23
répondu Reimeus 2013-03-08 20:00:03

parce que le thread "main" lancé par VM n'est pas le event dispatch thread.

14
répondu sol4me 2013-03-08 20:08:57

quelques composants Swing de L'API ne sont pas thread safe,ce qui signifie qu'ils peuvent causer des problèmes comme deadlock,il est donc préférable de créer et de mettre à jour ces composants swing en utilisant Event dispatcher thread fourni par Swing mais pas à partir du thread principal ou tout autre thread créé à partir de main.

3
répondu GONE 2013-09-11 12:04:29