私は何年も使用してきたコードを持っていますが、今朝、タスクが完了したときにプロパティの変更が呼び出されていないことに気付きました。内部クラスとしてスイング ワーカーをセットアップし、String プロパティ名 = 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 のブレークポイントにヒットしましたが、プロパティの変更通知は配信されません。(私は、swing worker がそれが完了したことを知っていることを確認するためだけに、done ルーチンを置いています。)
私はドキュメンテーションを見ましたが、ある種のプロパティの変更を手動で開始する必要があることがわかりません。
ありがとう、イラン