SwingWorker
se utiliza para los siguientes propósitos:Java - Diferencia entre SwingWorker y SwingUtilities.invokeLater()
- Para la ejecución de tareas de larga ejecución en un hilo diferente, así como para evitar que la interfaz gráfica de usuario de ser insensible
- Para actualizar la GUI con los resultados producidos por la tarea de larga ejecución al final de la tarea mediante el método
done()
. - Para actualizar la GUI de vez en cuando con los resultados intermedios producidos y publicados por la tarea con la ayuda de los métodos
publish()
yprocess()
.
SwingUtilities.invokeLater()
puede realizar las tareas anteriores de la siguiente manera:
- En lugar de ejecutar
SwingWorker.execute()
método de la EDT, podemos ejecutarExecutorService.submit(new MyRunnable())
ya que también va a crear otro hilo que puede ejecutar tarea de larga duración. - Para actualizar la GUI al final de la tarea, podemos poner el código (escrito en el método
done()
de case1)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
al final de la tarea. - Para actualizar la GUI en el medio de la tarea, podemos poner el código (escrito en el método
process()
de case1)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
en el lugar donde llamamos al métodopublish()
en caso1.
estoy haciendo esta pregunta porque el problema determinada en cuestión Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT puede ser resuelto por SwingUtilities.invokeLater()
pero no se puede resolver con SwingWorker
no estoy muy seguro de lo que es el 'asunto'. – akf
@akf si no está seguro, entonces déjelo. Simple :) –
El problema al que se refiere es solucionable mediante el uso de SwingWorker. Ver mi respuesta allí. –