【发布时间】:2014-03-20 10:04:12
【问题描述】:
我正在尝试通过单击 JFrame 表单的按钮取消功能。
这是我的工作函数:
private void start(final Callable<Void> func) {
worker = new SwingWorker<Boolean, Integer>() {
@Override
protected Boolean doInBackground() throws Exception {
publish(2);
func.call();
return true;
}
@Override
protected void done() {
boolean status;
try {
status = get();
dialog.dispose();
} catch (InterruptedException | ExecutionException e) {
progressBar.setString("ERROR");
Logger.getLogger(Parser.class.getName()).log(Level.SEVERE, null, e);
}
}
@Override
protected void process(List<Integer> chunks) {
progressBar.setStringPainted(true);
progressBar.setIndeterminate(true);
}
};
这就是我试图取消 SwingWorker 对象的原因:
dialog.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
worker.cancel(true);
}
});
但是当我点击关闭按钮时,它给了我异常并且func 没有在doinBackground() 方法中被取消。我怎样才能停止func 方法?
【问题讨论】:
-
func 应该如何知道它正在被取消?作为一般规则,doInBackground 必须合作(即注意被取消并停止它正在做的任何事情) - 虽然不知道如何在此处应用该规则;-)
-
嗯,那是不是说doInBackground操作不能取消了?
-
不,但你必须做它...
标签: java swing swingworker