在尝试取消匿名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();
}
首先我希望得到验证:
我可以通过杀死(取消)SwingWorker来杀死new Network(Config.HOST_NAME, Config.HOST_PORT)
代码。
因此,假设我的假设是正确的,我想取消匿名的SwingWorker,但是当我尝试给它命名initWorker
时,它需要是最终的,以便计时器可以引用它。但是,SwingWorker本身也需要引用计时器,因此计时器也需要是最终的。
所以我认为我设法在两个需要彼此的最终变量之间建立了一个依赖关系,我该如何解决这个问题?
问候。