的方法,我有一個的SwingWorker稱爲任務1,如何停止名爲靜態的doInBackground()的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);
}
}
而且我有一個按鈕,將執行任務1,
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");
}
當我點擊這個botton,會彈出一個帶有進度條的對話框,指示FeatureSetBuilder.main(args)方法正在運行。當task1完成時,done()方法將被調用並關閉該對話框。
它工作正常。
我想添加一個取消按鈕到該對話框,以便用戶可以隨時終止任務1。
這裏是我的取消按鈕,
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Stop the current SwingWorker");
task.cancel(true);
setVisible(false);
}
});
當我按下取消按鈕,任務1被似乎終止「FeatureSetBuilder - 成品」被打印出來。但是,靜態方法FeatureSetBuilder.main(args)仍在運行。
這與Swing和所有的事情沒有關係 - 「」我該如何停止運行Java代碼?「我首先要做的不是運行另一個類的主要方法,而是讓代碼更符合OOP標準。接下來,我將研究一些通知機制,以允許任何進程詢問正在運行的代碼以徹底停止自己。正如預期的那樣,魔鬼將在細節中。 –