所以我有一个使用受this tutorial(但稍作修改)启发的MVC模式设计的桌面应用程序。该应用程序需要做的是将文件列表从一个目录复制到另一个目录。我想要做的是基本上在每个文件被复制后更新我的GUI。当GUI不更新信息时使用多线程处理图形用户界面
首先让我给你看看代码。 在我的模型我有这个虚拟方法(不是真正的方法,但背后却是相同的逻辑):
public void dummyMethod(Integer k) throws InterruptedException{
for(int i=0;i<10;i++){
System.out.println(i);
Thread.sleep(1000);
this.firePropertyChange(DefaultController.BACKUP_DUMMY, i-1, i);
}
}
在我看来,我有这样的:
@Override
public void modelPropertyChange(PropertyChangeEvent evt) {
// .......
else if(evt.getPropertyName().equals(DefaultController.BACKUP_DUMMY)){
System.out.println("WHAT?");
this.dummy.setText(evt.getNewValue().toString());
}
}
正如你所能想象的什么?每次都打印,但直到循环结束才更新GUI。 这是当你使用SWING和EDT时的经典问题,我已经在oracle网站上读到了这个article/tutorial,但我不认为我需要使用SwingWorker。我只需要在GUI上更新单个组件。
“但我不认为我需要使用SwingWorker,我只需要在GUI上更新单个组件。”那么你最好仔细阅读SwingWorkers和美国东部时间,了解为什么这是你的错误决定:你正在避免你需要的工具。 – 2011-01-26 03:30:07