Puede ser que esto sea trivial, estoy luchando por comprender una documentación simple en SwingWorker.java SwingWorker.doInBackground() no debe acceder a los elementos de la GUI
Aquí está la copia pegada contenido
flujo de trabajo
Hay tres hilos que intervienen en el ciclo de vida de un SwingWorker:
hilo actual: El método execute() se llama en este hilo. Es programa SwingWorker para la ejecución en un hilo de trabajo y devuelve inmediatamente. Se puede esperar a que SwingWorker complete los métodos get .
Hilo de trabajo: se invoca el método doInBackground() en este hilo. Aquí es donde deberían realizarse todas las actividades de fondo. Para notificar PropertyChangeListeners sobre los cambios en las propiedades enlazadas, utilice los métodos firePropertyChange y getPropertyChangeSupport(). De forma predeterminada, , hay dos propiedades enlazadas disponibles: estado y progreso.
Hilo de envío del evento: Todas las actividades relacionadas con Swing ocurren en este hilo . SwingWorker invoca el proceso y los métodos done() y notifica cualquier PropertyChangeListeners en este hilo.
A menudo, el hilo actual es el hilo de envío del evento.
-
El subproceso de trabajo no es el EDT, por lo tanto, el código en doInBackground() no deben acceder elementos de la GUI. Es mi entendimiento correcto?
Antecedentes: Tenemos un código pequeño que usa SwingWorker pero tiene doInBackground() creando FileChooser y llamando al setCurrentDirectory()
. Sospecho que eso me está llevando a una excepción casi igual a http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6637181 (11-Cerrado, No es un defecto)
Gracias - hacemos lo que usted escribió en respuesta a casi todos los lugares. Hay algunas áreas donde el código usa swingworker. Incluso en esos casos, el procesamiento podría dividirse en partes de acceso GUI y no GUI. – Jayan
Hacer la división correcta generalmente aumentará el rendimiento y evitará problemas, por lo que se recomienda encarecidamente. –
@Jayan tutorial que habla de salida de publicación/proceso/hecho, puede probar que si (isEventDispatchThread) lea http://stackoverflow.com/questions/7053865/cant-get-arrayindexoutofboundsexception-fromure-and-swingworker- si-amenaza +1 – mKorbel