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
A
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
- 1. ¿Desde qué subproceso debería invocarse System.exit() en una aplicación Swing?
- 2. ¿Es necesario el método Principal en un programa Java?
- 3. Java: ¿volver a cambiar al hilo principal?
- 4. ¿Dónde está el método Principal en una aplicación de formularios?
- 5. Remoting desde una aplicación Swing al servidor GWT
- 6. Cómo cerrar una aplicación Java Swing desde el código
- 7. Llamando al método `Principal` de una aplicación de consola desde una aplicación de formulario (mediante un clic de evento)
- 8. ¿Es necesario que un método organizado en el subproceso de UI sea seguro para subprocesos?
- 9. Ejecutar el método principal de Java desde una aplicación de escritorio Java en una JVM diferente
- 10. Método de llamada en el subproceso GUI desde un subproceso de temporizadores
- 11. Accediendo al formulario principal desde el formulario
- 12. ¿Por qué es necesario el método DataBind()?
- 13. ¿Es posible llamar al método principal pasando args [] desde otro método?
- 14. Delphi - equivalente al método C# DateTime.IsDaylightSavingTime() necesario
- 15. llamando al método QThread.exec() es necesario en QThread?
- 16. ¿Es posible llamar al método dentro de una aplicación Java desde una JVM diferente?
- 17. Transición desde el Marco de Aplicación Swing (JSR 296)
- 18. pyserial - es posible escribir en el puerto en serie desde el subproceso a, doblo las lecturas desde el subproceso b?
- 19. Evento Swing-calling desde el panel interior
- 20. Android: Nuevo subproceso Ejecutable se ejecuta en el subproceso principal
- 21. llamando al hilo principal desde el hilo Runnable en java
- 22. Es necesario sumarizar en el método de prueba unitaria
- 23. .NET - ¿Es seguro el subproceso de método Queue.Enqueue?
- 24. Cambiar a BigInteger si es necesario
- 25. ¿Es seguro el subproceso DocumentBuilder.parse()?
- 26. NSRunLoop del subproceso principal al que se hace referencia en un subproceso secundario
- 27. ¿El subproceso del método de extensión es seguro?
- 28. ¿Quién llamará al método principal en el objetivo c
- 29. Con Swing y Java, lo que se hace con el subproceso "Swing-Shell"
- 30. ¿Cuál es un buen ejemplo de una aplicación Java Swing?
Ver [concurrencia de swing: Hilos iniciales] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ initial.html). –
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. –
Punto de pedantería: es un hilo AWT. –