我有这样的问题。许多SwingWorker
正在同时执行。它们都以SwingWorker.process
方法处理已发布的数据块。
当第一个线程在SwingWorker.process
方法中处理第一个数据块时,我需要停止所有线程。
因为我只需要询问用户如何处理已发现的数据块一次。我需要通知用户找到这样的文件,我需要问他如何处理找到的文件。
现在我的SwingWorker.process
方法是:
private static volatile Integer userOption = Integer.MIN_VALUE;
@Override
protected void process(final List<Path> chunks) {
if (userOption == Integer.MIN_VALUE) {
// to prevent all other SwingWorkers from doing smth until user makes a choice
userOption = -100;
userOption = JOptionPane.showOptionDialog(MainFrame.getInstance().getFrame(),
"New viruses where detected!\r\n\r\n Please choose your action:", "Delete or view viruses",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { "Delete viruses",
"Show in table" }, "Delete viruses");
}
if (userOption == JOptionPane.OK_OPTION)
VirusManager.deleteViruses(chunks);
}
我没有显示SwingWorker.doInBackground
方法,因为它只遍历系统文件树并在文件后发布文件。
如何停止所有SwingWorker
,直到用户在JOptionPane.showOptionDialog
中做出选择?