Tengo un subproceso de trabajo que debe esperar a que EDT actualice la GUI antes de continuar la ejecución. He usado el método de publicación para decirle a EDT que cambie algo. ¿Cómo puedo hacer que el trabajador espere que ocurra ese cambio?subproceso de trabajador oscilante de Java para esperar EDT
Respuesta
Si se trata también de su misma subproceso de trabajo que inicia los cambios en la interfaz, entonces no hay un mecanismo que ya están construidos para la espera de los cambios a realizar:
SwingUtilities.invokeAndWait()
debe ajustarse a la factura bien.
Otra alternativa sería usar SwingUtilities.invokeLater() para darle al EDT algún código para ejecutar, lo que activará su subproceso una vez que el EDT quede inactivo, es decir, cuando se disponga a ejecutar esta tarea. Esto implica disparar invokeLater()
inmediatamente seguido de wait()
y esperar que la activación del EDI no se produzca antes de hacer el wait()
. Sin embargo, esto no es completamente infalible con respecto al tiempo.
Supongo que está utilizando SwingWorker para publicar sus resultados. Puede usar un indicador booleano para indicar que el valor ha sido procesado. Este indicador se borra antes de publicar resultados intermedios, y luego se usa para bloquear el hilo hasta que se establece. El subproceso de la interfaz de usuario establece el indicador cuando finaliza el procesamiento de los datos publicados.
class MyWorker extends SwingWorker<K,V>
{
boolean processed = true;
protected void doInBackground() {
for (;;) {
setProcessed(false);
publish(results);
waitProcessed(true);
}
}
synchronized void waitProcessed(boolean b) {
while (processed!=b) {
wait();
}
// catch interrupted exception etc.
}
synchronized void setProcessed(boolean b) {
processed = b;
notifyAll();
}
protected void process(List<V> results) {
doStuff();
setProcessed(true);
}
}
gracias por su respuesta. Sin embargo, he elegido el método de Carl Smotricz, porque tenía más sentido en mi situación y me había olvidado por completo de invocar y esperar. Pero el método que ha sugerido todavía es bueno saber. – Mihaela
- 1. Trabajador Subproceso en Java
- 2. Seguro de usar Component.repaint() fuera de EDT?
- 3. Obtenga ID único de trabajador/subproceso/proceso/solicitud en PHP
- 4. Java Swing: se ejecuta en EDT
- 5. JAVA TimeZone issue EDT Vs EST
- 6. selector de tiempo oscilante
- 7. ¿Cómo puedo detectar excepciones de subproceso de envío de evento (EDT)?
- 8. Barra de progreso progresiva de Java del problema EDT
- 9. Volcado de hilo Java: BLOQUEADO hilo sin "esperar para bloquear ..."
- 10. bloqueo de subproceso Java
- 11. pitón subproceso ocultar la salida estándar y esperar a completar
- 12. Java: seguro de subproceso RandomAccessFile
- 13. Excepción de captura en el hilo oscilante
- 14. Invocar un método de limpieza para el subproceso de usuario Java, cuando JVM detiene el subproceso
- 15. ¿Cómo puedo prevenir o recuperar un desbordamiento de pila en un subproceso de trabajador?
- 16. ¿Cómo puedo configurar un subproceso de trabajador de fondo en Single Thread Apartment?
- 17. ASP.NET 4.0- Trabajador de fondo: mejor práctica
- 18. Oyente de extremo de subproceso. Java
- 19. convertir de EST/EDT a GMT
- 20. Cómo detener el Swing EDT
- 21. Subproceso Trabajador de fondo: actualizar la IU y cancelar la operación
- 22. Prioridad de subproceso Java Garbage Collection
- 23. ¿Cómo hacer la comunicación de trabajador a trabajador?
- 24. Identificación del subproceso en Java
- 25. Enchufe usando en un applet oscilante
- 26. Cambiando el color de fondo subyacente de una ventana oscilante
- 27. java- cómo esperar constantemente para que ocurra un evento
- 28. Java: ¿cómo puede esperar un hilo en varios objetos?
- 29. ¿Subproceso de mensaje de subproceso para un subproceso con una ventana oculta?
- 30. Necesita ayuda para detener el subproceso BackgroundWorker
¿Te refieres a un botón 'Pause'? – trashgod
Suena como algo realmente malo que desea probar. –