Pessoal,
tenho o seguinte código dentro de um actionPerformed(), então lembrando que tudo que está aqui será executado na thread da AWT.
[code]SwingWorker a = new SwingWorker() {
public Object doInBackground() {
boolean resultado = modelo.salvar();
return resultado;
}
public void done() {
boolean resultado = (Boolean) get();
if (resultado)
JOptionPane.showMessageDialog(null, “salvo com sucesso”);
else
JOptionPane.showMessageDialog(null, “erro ao salvar”);
}
}
[/code]
Mas como estou utilizando SwingWorker, toda a regra de negócio dentro do doInBackground() será chamado em uma thread a parte, deixando a thread da AWT livre, que só será chamada novamente no método done(), até ai OK!
Mas e se eu estiver utilizando observadores dentro do método salvar() ?, por ex:
[code]class Modelo extends Observable {
public boolean salvar {
boolean res = em.persist();
atualizar();
return res;
}
public void atualizar() {
setChanged();
notifyObservers();
}
}
[/code]
Sendo assim, a thread pararela vai chamar o método salvar(), que vai chamar o atualizar(), que vai chamar o notifyObservers() e vai invocar o método update() das janelas que estão observando-a.
e agora a dúvida, em que thread vai rodar o bloco de código dentro do update()? na thread pararela ou na thread da AWT?
ou vai rodar sempre na pararela e caso tenha algum comando que manipule a Janela, será delegado essa tarefa para thread AWT?
lembrando que após chamar o update() ele voltará para o doInBackground() e chamará o done(), desta vez já estando na thread AWT.
Ele funciona corretamente, mas não sei se estou “estragando” o SwingWorker.
Obrigado