Intentaré responder a todas sus 3 preguntas. En primer lugar, el orden en que no se especifica el incendio de ActionListener
s. Uno nunca debe asumir un orden específico que disparará. Si necesita que las acciones se realicen en un orden específico, colóquelas en el mismo ActionListener
.
En la programación de Swing, que será 'casi' siempre en un entorno multi-hilo. Hay un hilo llamado Subproceso de envío de evento (EDT). Este es el hilo que maneja todos los eventos. Cualquier otro procesamiento que hagas debe hacerse en un hilo diferente, de lo contrario tu GUI de Swing puede dejar de responder.
Un caso común para varias roscas de oscilación es cualquier momento que tiene que hacer algún tipo de procesamiento que se lleva una cantidad de tiempo prolongado. (Cálculos intensos, IO, conexiones a la base de datos) Querrá hacer el arduo trabajo en un hilo separado del EDT. Eso mantendrá su GUI receptiva.
La red de Oracle tiene un gran tutorial sobre la concurrencia en Swing. Te recomiendo check it out.
un columpio programador trata de los siguientes tipos de hilos:
- las discusiones iniciales, los hilos que ejecutan código de la aplicación inicial.
- El hilo de envío de eventos, donde se ejecuta todo el código de manejo de eventos. La mayoría del código que interactúa con el marco Swing también debe ejecutarse en este hilo.
- Subprocesos de trabajo, también conocidos como subprocesos de fondo, donde se ejecutan las tareas de fondo que consumen mucho tiempo.
La respuesta canónica a cualquier pregunta multi-threading en oscilación es utilizar un SwingWorker
. Le permite coordinar fácilmente el trabajo de fondo en un hilo separado con el EDT. Como de costumbre, Oracle tiene un great tutorial on how to use SwingWorker
.
Extraño una mención directa de SwingWorker, pero por lo demás es una muy buena respuesta. – extraneon
@extraneon: sí 'SwingWorker' es la respuesta canónica a multi-threading en Swing. Agregaré un rápido reconocimiento al final. – jjnguy
Desde una perspectiva de diseño, es posible crear un ActionListener al que puede registrar otros ActionListeners (u otra clase) que pueden ejecutarse en el orden en que se establecen. – extraneon