thread de trabalho de swing java para aguardar EDT

Eu tenho um segmento de trabalho que deve aguardar o EDT atualizar a GUI antes de continuar a execução. Eu usei o método publish para dizer ao EDT para mudar alguma coisa. Como posso fazer o trabalhador esperar que essa mudança ocorra?

Se também for o mesmo thread de trabalho que está iniciando as alterações da GUI, haverá um mecanismo pronto para aguardar que essas alterações sejam feitas:

SwingUtilities.invokeAndWait ()

deve caber a conta bem.

Outra alternativa seria usar SwingUtilities.invokeLater () para dar ao EDT algum código para ser executado, o que acordará o seu thread uma vez que o EDT se tornar inativo, isto é, quando ele executar essa tarefa. Isso envolveria triggersr off invokeLater() imediatamente seguido por um wait() e esperar que o wake-up do EDI não aconteça antes de você fazer o wait() . Isso não é totalmente infalível em relação ao tempo.

Estou supondo que você esteja usando o SwingWorker para publicar seus resultados. Você pode usar um sinalizador booleano para indicar que o valor foi processado. Esse sinalizador é limpo antes de publicar resultados intermediários e, em seguida, usado para bloquear o encadeamento até que seja definido. O thread da interface do usuário define o sinalizador quando ele processa os dados publicados.

 class MyWorker extends SwingWorker { 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 results) { doStuff(); setProcessed(true); } }