2

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

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

4

1 回答 1

2

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

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

于 2012-06-21T11:02:22.293 回答