【发布时间】:2016-02-07 20:50:06
【问题描述】:
我有一个名为 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() 将被调用并关闭该对话框。
效果很好。
我想在该对话框中添加一个取消按钮,以便用户可以随时终止 task1。
这是我的取消按钮,
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Stop the current SwingWorker");
task.cancel(true);
setVisible(false);
}
});
当我按下取消按钮时,任务 1 似乎被终止,因为“FeatureSetBuilder - Finished”被打印出来。但是,静态方法 FeatureSetBuilder.main(args) 仍在运行。
【问题讨论】:
-
这与 Swing 几乎没有关系,而与 --
"how do I stop running Java code?"首先我要做的不是运行另一个类的 main 方法,而是使代码更符合 OOP .接下来,我将研究一些通知机制,以允许任何进程要求正在运行的代码完全停止自身。正如预期的那样,魔鬼将在细节中。
标签: java swing swingworker