2012-05-14 7 views
6

¿Debería utilizar SwingUtilities.invokeLater(Runnable) si está modificando la GUI y está en el AWT Event Dispatching Thread, como ActionListener?SwingUtilities.invokeLater en AWT Evento envío de subproceso

+0

Depende de lo que intentes lograr. – Jeffrey

+0

@Jeffrey Disculpe, edité la pregunta. – Stripies

+3

Todavía depende de lo que estás tratando de lograr. Cuando estás en el método 'actionPerformed' de un' ActionListener', estás en el EDT. Sin embargo, hay algunos casos en los que necesita realizar alguna acción después de que todos los otros oyentes hayan terminado de procesar el mismo evento, en cuyo caso debe usar 'invokeLater'. Entonces, ¿qué estás tratando de hacer realmente? – Jeffrey

Respuesta

5

Siempre debe realizar actualizaciones de la GUI en el subproceso de distribución de eventos (EDT). Sin embargo, como Jeffrey señala en los comentarios, el método ActionListener.actionPerformed en un objeto Swing es ya invocado desde el EDT.

Si simplemente desea que el JButton a mirar habilitar/unenabled o para añadir/quitar elementos de una JList, y su hacer estos cambios a través de un ActionListener en un componente Swing, entonces no debería tener que invocar explícitamente SwingUtilities.invokeLater.

+1

+1, si el OP intentaba borrar un 'JTextComponent' o reubicar un' JScrollBar', 'invokeLater' podría haber sido necesario. Pero viendo que solo está habilitando/deshabilitando un 'JButton' y modificando una' JList', no lo es. – Jeffrey

+0

@Jeffrey ¿Por qué habría sido necesario si estuviera haciendo eso? – Stripies

+0

Mientras estemos en el EDT, usar 'invokeLater' es bastante inútil. Obviamente, si queremos ejecutar algo en un momento posterior, se aplican las mismas restricciones que de costumbre (es decir, solo porque comenzamos un hilo desde el EDT no nos ayuda para nada). – Voo

Cuestiones relacionadas