我有一个名为Task1的SwingWorker,
class Task1 extends SwingWorker<Void, Void> {
@Override
public void doInBackground() {
String[] args = {};
try {
FeatureSetBuilder.main(args); //<---It is a static method
} catch (Exception e1) {
e1.printStackTrace();
}
return null;
}
public void done() {
UISettings.FP_GENERATOR_DIALOG_2.cancelButton.setEnabled(true);
loadingDialog.progressBar.setIndeterminate(false);
loadingDialog.setVisible(false);
}
}
我有一个执行Task1的按钮,
public void actionPerformed(ActionEvent e) {
System.out.println("FeatureSetBuilder - Start");
String[] args = {};
try {
task1 = new Task1();
task1.execute();
loadingDialog.popOut(task1);
task1.cancel(true);
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.println("FeatureSetBuilder - Finished");
}
单击此按钮时,将弹出带有进度条的对话框,指示FeatureSetBuilder.main(args)方法正在运行。当task1完成时,将调用done()方法并关闭该对话框。
工作正常。
我想在该对话框中添加一个Cancel按钮,以便用户可以随时终止task1。
这是我的取消按钮,
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Stop the current SwingWorker");
task.cancel(true);
setVisible(false);
}
});
当我按下取消按钮时,任务1似乎被终止为&#34; FeatureSetBuilder - 已完成&#34;打印出来。但是,静态方法FeatureSetBuilder.main(args)仍在运行。
答案 0 :(得分:3)
您的doInBackground
方法应定期检查任务是否已取消。来自SwingWorker
class'javadoc的示例:
@Override public List<Integer> doInBackground() { while (! enough && ! isCancelled()) { number = nextPrimeNumber(); publish(number); setProgress(100 * numbers.size() / numbersToFind); } } return numbers; }
我真的建议您阅读SwingWorker
及相关类中所有类/方法的javadoc。 EventDispatchThread
相关问题可能非常棘手。