在取消()上停止SwingWorker doInBackground()中的持久方法

时间:2012-06-21 10:50:03

标签: java swingworker

有很多关于如何取消/停止SwingWorker的信息。但是,当从EDT调用doInBackround()时,我无法找到如何在cancel方法中停止使用持久方法的正确解决方案。

例如,如果使用doInBackround()org.apache.commons.io.FileUtils.listFiles(file, FileUtils.getFileFilter(), DirectoryFileFilter.DIRECTORY);方法中启动递归文件搜索,并且从EDT调用cancel(true),那么如何中断文件搜索?

1 个答案:

答案 0 :(得分:2)

您需要后台任务的协作才能阻止它。它应定期检查任务是否已取消,如果取消则尽快返回。

因此,要么自己重新实现listFiles()方法并在每次迭代时检查任务是否未被取消,要么使用脏技巧,并在文件过滤器内部抛出一些运行时异常(如果任务)已取消(因为将为listFiles()方法检查的每个文件调用文件过滤器。