sirve que progressbar para example ejemplo java swing main swingutilities invokelater

java - que - ¿Por qué usar SwingUtilities.invokeLater en el método principal?



swingworker java example (3)

Algunos componentes Swing de la API no son seguros para subprocesos, lo que significa que pueden causar algunos problemas como interbloqueo. Por lo tanto, es mejor crear y actualizar dichos componentes de oscilación utilizando la cadena de distribución de eventos proporcionada por Swing pero no desde el hilo principal o cualquier otro hilo creado desde main.

Después de años de programación en Java, siempre solía crear mis métodos main() como este:

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

Pero recientemente estudié algunos códigos de la Web y vi esto a veces en lugar del uso main() habitual main() anterior:

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

Simplemente quiero saber:

  • ¿Por qué usar esto en lugar del habitual main() way? No puedo ver ninguna diferencia cuando lo intento.
  • ¿Cuál es la diferencia entre estas dos formas?

Gracias por leerme y tus respuestas.


Los documentos explican por qué. De los hilos iniciales

¿Por qué el hilo inicial simplemente no crea la GUI? Porque casi todo el código que crea o interactúa con los componentes de Swing debe ejecutarse en el hilo de envío del evento.

y de The Event Dispatch Thread

Algunos métodos del componente Swing están etiquetados como "hilo seguro" en la especificación API; estos pueden invocarse de forma segura desde cualquier hilo. Todos los demás métodos del componente Swing se deben invocar desde el hilo de envío del evento. Los programas que ignoran esta regla pueden funcionar correctamente la mayor parte del tiempo, pero están sujetos a errores impredecibles que son difíciles de reproducir.


Porque el hilo "principal" iniciado por VM no es el hilo de envío del evento .