Tengo un par de preguntas con respecto a Swing y el uso de EDT para actualizaciones de la GUI. Acabo de empezar a leer sobre este tema, así que soy un principiante en esta área:Java Swing: se ejecuta en EDT
- ¿Qué operaciones se requieren para ejecutar en el EDT? Si no lo hacen, ¿es simplemente una excepción planteada?
- ¿Hay momentos específicos en los que realmente estamos en el EDT automáticamente?
- si programamos una tarea usando
SingUtilities.invokeLater
la ponemos en la cola actual de las tareas de actualización de la GUI ¿verdad? - Creo que los accesos a la cola anterior están sincronizados, o se usa alguna colección concurrente, pero si programo dos tareas de actualización de la GUI, desde dos hilos de fondo, ¿es imposible decir cuál se agregará primero? Por ejemplo, si el Tema 1 FIRST envía una tarea para configurar el texto de un JLable en "sí", y luego, poco tiempo después, aparece el segundo hilo y envía la tarea de establecer ese valor a "no", ¿estamos seguros de que el resultado será "sí", o es simplemente una cuestión de cómo estas cosas están programadas por el sistema operativo?
¿Cómo exactamente el SwingWorker asegura que el método
done()
se ejecuta en EDT? Se establece el siguiente código:future = new FutureTask<T>(callable) { @Override protected void done() { doneEDT(); setState(StateValue.DONE); } };
así que me preguntaba si FutureTask alguna manera se asegura de que invokeLater
se llama?
Gracias por todas sus respuestas.
Dos preguntas: 4. Entonces, ¿es el primer hilo que se ejecuta más tarde? Entonces, ¿puede ser el caso que OS programe los segundos hilos de fondo invokeLater llame FIRST y la orden se arruine? 5. Todavía no veo cómo eso logra EDT. do Submit agrega Runnable to AcumulativeRunnable ... –
Bober02
@ Bober02 Vea el ejecutable javax.swing.SwingWorker.DoSubmitAccumulativeRunnable, que se ejecuta en el EDT debido al uso del Swing 'Timer'. Para 4: sí, deberá asegurarse de que su único hilo de fondo programe el ejecutable antes de que el otro hilo programe su ejecución si quiere controlar el pedido – Robin
En algún momento, todo lo enviado a doSubmit() se ejecuta en el EDT. No tiene que importar cómo y dónde se hace: esta clase se ha probado y funciona como está documentado. –