2012-06-12 12 views
5

En mi método main(String[] args) no tengo más que una llamada al SwingUtilities.invokeAndWait para ejecutar un método main1 en el hilo Swing. Siempre supuse que necesitaba esto para la seguridad del hilo. Me han dicho que no es necesario porque el primer hilo para hacer cualquier código GUI se convierte en el hilo de la GUI. O para decirlo de otra manera, solo puedes usar Swing de un hilo, pero no importa cuál. Pero no puedo encontrar una fuente para esto y me gustaría estar seguro.¿Es necesario cambiar al subproceso Swing desde el método principal de una aplicación?

+5

Ver [concurrencia de swing: Hilos iniciales] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ initial.html). –

+10

La documentación de Swing indica que esto es lo que se debe hacer. Yo tendería a creerlo, porque si bien ignorar el consejo podría funcionar el 99.9% del tiempo, tiene la posibilidad de fallar en algún momento, y de acuerdo con las leyes del universo, esta falla solo ocurrirá cuando demuestres tu programa. a su mayor cliente o su jefe. –

+2

Punto de pedantería: es un hilo AWT. –

Respuesta

7

Lo que le han dicho es falso. El método principal será el método main. Toda la actividad relacionada con la GUI se debe realizar en un subproceso completamente independiente denominado Event Dispatch Thread. El hilo principal no convierte en el EDT.

Un buen ejemplo para ver lo que estoy hablando:

public class ThreadTest { 
    public static void main(String[] args) { 
     final Thread main = Thread.currentThread(); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       Thread edt = Thread.currentThread(); 

       System.out.println(main); 
       System.out.println(edt); 
       System.out.println(main.equals(edt)); 
      } 
     }); 
    } 
} 
Cuestiones relacionadas