如何在 SwingWorker 的 doInBackground() 中停止调用的静态方法
How to stop a called static method in doInBackground() of SwingWorker
我有一个名为 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() 方法并关闭该对话框。
它工作正常。
我想在该对话框中添加一个取消按钮,以便用户可以随时终止任务 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 - Finished" 被打印出来了。但是,静态方法FeatureSetBuilder.main(args) 仍然是运行。
您的 doInBackground
方法应该定期检查任务是否已被取消。来自 SwingWorker
class' javadoc 的示例:
@Override
public List<Integer> doInBackground() {
while (! enough && ! isCancelled()) {
number = nextPrimeNumber();
publish(number);
setProgress(100 * numbers.size() / numbersToFind);
}
}
return numbers;
}
我强烈建议您阅读 SwingWorker
和相关 class 中所有 classes/methods 的 javadoc。 EventDispatchThread
相关问题可能非常棘手。
我有一个名为 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() 方法并关闭该对话框。
它工作正常。
我想在该对话框中添加一个取消按钮,以便用户可以随时终止任务 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 - Finished" 被打印出来了。但是,静态方法FeatureSetBuilder.main(args) 仍然是运行。
您的 doInBackground
方法应该定期检查任务是否已被取消。来自 SwingWorker
class' javadoc 的示例:
@Override public List<Integer> doInBackground() { while (! enough && ! isCancelled()) { number = nextPrimeNumber(); publish(number); setProgress(100 * numbers.size() / numbersToFind); } } return numbers; }
我强烈建议您阅读 SwingWorker
和相关 class 中所有 classes/methods 的 javadoc。 EventDispatchThread
相关问题可能非常棘手。