尝试取消匿名 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,但是当我尝试给它一个 nameinitWorker
时,它需要是 final 以便计时器可以引用它。但是 SwingWorker 本身也需要引用计时器,因此计时器也需要是最终的。
所以我想我设法在两个需要彼此的最终变量之间建立了依赖关系,我该如何解决这个问题?
问候。