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