Я использую шаблон MVC для моего дизайна, когда пользователь нажимает кнопку поиска, я вызываю поиск в модели, но я также хочу обновить индикатор выполнения с информацией, возвращенной с этой модели.
Я попытался использовать swingworker, но индикатор выполнения не обновляется. Я подозреваю, что делаю что-то не так с моей резьбой.
Моя кнопка, определенная в контроллере:
class SearchBtnListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
_view.displayProgress();
}
}
Это вызывает поиск в модели и имеет следующий вызов в представлении:
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();
}
}
Манекен-функция, определенная в модели для тестирования:
public int getStatus(){
Random r = new Random();
return r.nextInt();
}