MVC Progress Bar Threading
Estou usando um padrão MVC para o meu design. Quando um usuário pressiona o botão de pesquisa, chamo uma pesquisa no modelo, mas também quero atualizar uma barra de progresso com as informações retornadas desse model
Tentei usar um swingworker, mas a barra de progresso não é atualizada. Suspeito que esteja fazendo algo errado com minha segmentação.
Meu botão, conforme definido no controlador, é:
class SearchBtnListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
_view.displayProgress();
}
}
Isto chama a pesquisa no modelo e tem a seguinte chamada na visualização:
public void displayProgress() {
TwoWorker task = new TwoWorker();
task.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent e) {
if ("progress".equals(e.getPropertyName())) {
_progressBar.setValue((Integer) e.getNewValue());
}
}
});
task.execute();
}
private class TwoWorker extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
_model.startSearch(getTerm()); // time intensive code
File file = new File("lock");
while (file.exists()){
setProgress(_model.getStatus());
System.out.println(_model.getStatus()); // never called
}
return null;
}
protected void done(){
updateMain();
}
}
unção dummy definida no modelo para teste:
public int getStatus(){
Random r = new Random();
return r.nextInt();
}