有很多关于如何取消/停止SwingWorker的信息。但是,当从EDT调用doInBackround()
时,我无法找到如何在cancel
方法中停止使用持久方法的正确解决方案。
例如,如果使用doInBackround()
在org.apache.commons.io.FileUtils.listFiles(file, FileUtils.getFileFilter(), DirectoryFileFilter.DIRECTORY);
方法中启动递归文件搜索,并且从EDT调用cancel(true)
,那么如何中断文件搜索?
答案 0 :(得分:2)
您需要后台任务的协作才能阻止它。它应定期检查任务是否已取消,如果取消则尽快返回。
因此,要么自己重新实现listFiles()
方法并在每次迭代时检查任务是否未被取消,要么使用脏技巧,并在文件过滤器内部抛出一些运行时异常(如果任务)已取消(因为将为listFiles()
方法检查的每个文件调用文件过滤器。