java - 在 Cancel() 上停止 SwingWorker doInBackground() 中的持久方法

标签 java swingworker

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

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

最佳答案

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

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

关于java - 在 Cancel() 上停止 SwingWorker doInBackground() 中的持久方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11136541/

相关文章:

java - wait() 是否需要局部变量同步

java - NIO 聊天应用程序无法为多个客户端正常工作

java - 试图阻止 Swing worker

Java高级GUI应用程序框架

java - OpenCV - Java - 如何删除集群周围的一些像素

java - Swing 应用程序中音频线程的设计模式 : How to notify midi executor is shutdown to drive a GUI state-change?

java - 在应用程序启动 Java swing 之前等待光标

java - 更新进度条

Java ProgressMonitor 不工作

java - 带参数调用方法