在试图取消匿名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();
}第一个假设我想要被证实:
I可以通过杀死(取消) SwingWorker.来杀死.代码。
因此,假设我的假设是正确的,我想取消匿名SwingWorker,但是当我尝试给它命名initWorker时,它需要是最终的,这样计时器就可以引用它。但是,SwingWorker本身也需要引用计时器,因此定时器也必须是最终的。
因此,我想我成功地在两个彼此需要的最终变量之间创建了一个依赖关系,我如何解决这个问题?
致以问候。
发布于 2013-05-18 21:50:28
您不必在创建时添加ActionListener。您只需将null传递给Timer的构造函数,然后使用addActionListener添加ActionListener。
https://stackoverflow.com/questions/16628738
复制相似问题