Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止所有进入SwingWorker.process方法的线程,直到用户在JOptionPane中做出选择?_Java_Swing_Swingworker - Fatal编程技术网

Java 如何停止所有进入SwingWorker.process方法的线程,直到用户在JOptionPane中做出选择?

Java 如何停止所有进入SwingWorker.process方法的线程,直到用户在JOptionPane中做出选择?,java,swing,swingworker,Java,Swing,Swingworker,我有这样的问题。许多SwingWorker正在同时执行。它们都在SwingWorker.process方法中处理已发布的数据块 当第一个线程在SwingWorker.process方法中处理第一块数据时,我需要停止所有线程 因为我只需要问用户一次如何处理找到的数据块。我需要通知用户找到了这样的文件,我需要问他如何处理找到的文件 目前,我的SwingWorker.process方法是: private static volatile Integer userOption = Integer.MIN

我有这样的问题。许多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);
    }
private static volatile Integer userOption=Integer.MIN\u值;
@凌驾
受保护的无效进程(最终列表块){
if(userOption==Integer.MIN\u值){
//在用户做出选择之前,防止所有其他Swingworker执行smth
userOption=-100;
userOption=JOptionPane.showOptionDialog(MainFrame.getInstance().getFrame(),
“检测到新病毒!\r\n\r\n请选择您的操作:”、“删除或查看病毒”,
JOptionPane.OK_取消_选项,JOptionPane.QUESTION_消息,null,新字符串[]{“删除病毒”,
“在表中显示”},“删除病毒”);
}
if(userOption==JOptionPane.OK\u选项)
VirusManager.deleteVirus(块);
}
我没有显示
SwingWorker.doInBackground
方法,因为它只遍历系统文件树并发布一个又一个文件


如何停止所有
SwingWorker
s,直到用户在
作业窗格中做出选择。showOptionDialog

此方法非常好,事实上,您甚至不需要
用户选项=-100或波动性。这是因为所有
进程
调用都在同一个线程上,即EDT。我看到的唯一问题是,即使用户单击“否”,您也会继续进行后台工作。我如何继续进行后台工作?如果用户单击“否”,则
userOption=OK_选项
这只意味着
过程
不会做任何事情。但是
doInBackground
不会停止。如果你想停止
doInBackground
方法,那么你应该澄清,在问题中…从这里发布的代码到…是不可能的,请说明什么是同时执行的,投票结束的范围太广,顺便说一句,如果运行多个实例,你必须用唯一标识符命名每个实例,在实际生产代码中使用Runnable#Thread,而不是在将来使用阴影方法,SwingWorkerbtw JOptionPane在屏幕上显示之前停止代码的执行,必须在JProfiler中进行测试