2011-04-25 788 views
7

en el libro que estoy leyendo, cada ejemplo de interfaz gráfica de usuario con múltiples hilos tiene algo así:Java EventQueue. ¿Por qué debería ser todo en el método invokelater?

public static void main(String[] args) throws Exception 
{ 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      JFrame frame = new SomeKindOfFrame(); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setVisible(true); 
     } 
    }); 
} 

(me refiero EventQueue). pero no es el código ejecutado automáticamente en el hilo principal (EDT)?

Respuesta

6

Las aplicaciones de GUI de escritorio generalmente funcionan de esta manera. Hay un hilo para gui y uno o varios hilos para el resto de la aplicación. Con EventQueue, especifique qué subproceso de la GUI debe hacer desde otros subprocesos.

+0

Aparentemente en oscilación esto se conoce como la "regla del hilo único". Los eventos Swing se procesan a partir del hilo del evento que toma estas pequeñas instancias 'Runnable()' y las ejecuta. –

+0

@Warren P, totalmente de acuerdo. Solo traté de explicar esto de la manera más fácil. Por cierto, gracias por las correcciones gramaticales. –

13

El hilo principal no es lo mismo que el EDT. Si agrega System.out.println(Thread.currentThread().getName(), lo verá imprimir main dentro de main() y AWT-EventQueue-0 cuando esté dentro del método run() del Runnable.

Aquí está a discussion of the history of the single threaded rule in Swing que pueden ayudar a aclarar las cosas.

+1

+1 buen enlace. –

Cuestiones relacionadas