匿名の SwingWorker をキャンセルしようとすると、奇妙な依存関係に遭遇しました。私の現在のコード:
private static void init() {
if (connected) {
return;
}
//final SwingWorker<Void, Void> initWorker;
final Timer noConnectionTimer = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//initWorker.cancel(true);
waitObject.setTimedOut(true);
connected = false;
waitObject.process();
}
});
new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
noConnectionTimer.setRepeats(false);
noConnectionTimer.start();
cachedInstance = new Network(Config.HOST_NAME, Config.HOST_PORT);
if (connected) {
noConnectionTimer.stop();
new Thread(cachedInstance).start();
waitObject.setTimedOut(false);
waitObject.process();
}
return null;
}
}.execute();
}
検証したい最初の仮定:
new Network(Config.HOST_NAME, Config.HOST_PORT)
SwingWorker を強制終了 (キャンセル) することで、コードを強制終了できます。
したがって、私の仮定が正しいと仮定すると、匿名の SwingWorker をキャンセルしたいのですが、 name を付けようとするinitWorker
と、タイマーが参照できるように final にする必要があります。ただし、SwingWorker 自体もタイマーを参照する必要があるため、タイマーも final である必要があります。
それで、お互いを必要とする 2 つの最終変数の間に依存関係を作成できたと思います。これを修正するにはどうすればよいですか?
よろしく。