Cara, há N formas de usar o SwingWorker.
Como essa a seguir.
class MySwingWorker extends SwingWorker<Object, Object> {
public int number;
public String path;
@Override
protected Object doInBackground() throws Exception {
// faz alguma operacao, como um acesso a banco
return operationFacade.save(number, path);
}
@Override
protected void done() {
try {
// este get vai retornar o resultado do doInBackground, por
// exemplo o retorno do acesso ao banco. Com ele podemos
// atualizar a tela
Object obj = get();
wizardEnd.getJLabel0().setText(
"Operacao concluida com sucesso. " + obj);
} catch (Exception e) {
e.printStackTrace();
}
progressBarPanel.setProgressBar(false);
}
};
private void event(int number, String path) {
progressBarPanel.setProgressBar(true);
MySwingWorker worker = new MySwingWorker();
worker.number = number;
worker.path = path;
worker.execute();
}
Pense que o método event() é disparado por um actionListener, um botão.
Ele então instância um MySwingWorker, define alguns parametros e dispara
o SwingWorker chamando .execute().
O SwingWorker então chama o doInBackground() numa thread que não irá congelar
a tua tela e retorna alguma coisa. Um processo, relatórios, acesso a banco, etc.
Após o SwingWorker chama o done(), que é executado no EDT (sabes o que é?).
A função dele é pegar o retorno do processo, através do get(), e fazer alguma
atualização na tela de acordo.
Mas se quiser, não precisar criar o MySwingWorker, basta fazer algo assim:
private void event(int number, String path) {
progressBarPanel.setProgressBar(true);
new SwingWorker<Object, Object>() {
@Override
protected Object doInBackground() throws Exception {
// faz alguma operacao, como um acesso a banco
// number e path estao acessiveis na classe
return operationFacade.save(number, path);
}
@Override
protected void done() {
try {
// este get vai retornar o resultado do doInBackground, por
// exemplo o retorno do acesso ao banco. Com ele podemos
// atualizar a tela
Object obj = get();
wizardEnd.getJLabel0().setText(
"Operacao concluida com sucesso. " + obj);
} catch (Exception e) {
e.printStackTrace();
}
progressBarPanel.setProgressBar(false);
}
}.execute();
}
É isto, não precisa fazer mais nada, como chamar o doInBackground, o done, controlar Thread
ou qq coisa. Basta criar o SwingWorker, preencher os métodos e chamar o .execute()
Ou seja, experimente as opções e fique com aquele que achar melhor!