我有多年来一直在使用的代码,今天早上我注意到任务完成后没有调用属性更改。我已经将摇摆工人设置为内部类,并在 String propertyName = evt 上放置了一个断点......它从未达到断点。
void loadData() {
work2 = new bkgdLoadData();
work2.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if( propertyName.equals("state")) {
SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue();
if( state == SwingWorker.StateValue.DONE) {
work2 = null;
}
}
}
});
work2.execute();
}
您可以看到我在任务完成时将对象 work2 设置为 null,现在它不再设置为 null。在课堂上,我添加了一个完成的例程,它会在 doinbackground 完成时触发。令我困惑的是为什么没有触发属性更改侦听器。一定在我不注意的情况下发生了一些变化。
protected class bkgdLoadData extends SwingWorker<Integer, Object> {
@Override
protected Integer doInBackground() {
switch(bkgdMode) {
case 0:
doRead();
break;
case 1:
doWrite();
break;
case 2:
runRobot();
break;
}
return 0;
}
@Override
protected void done() {
int i=0;
i++;
}
}
done 处的断点被命中,但没有传递属性更改通知。(我放置 done 例程的唯一目的是验证摇摆工人是否知道它已经完成。)
我查看了文档,我没有看到我必须手动触发某种属性更改,所以我真的,真的卡住了,希望另一双眼睛告诉我我犯了什么愚蠢的错误。
谢谢,伊兰