长时间运行或阻塞进程导致我的JFrame等待并停止其他活动

时间:2014-10-24 02:50:00

标签: java

递归列出Java中的大量文件和目录导致我的JFrame等待并停止其他活动

如果java列出像C://和D:// root这样的大文件,那么在我的电脑中大约需要大约15分钟。当java执行列表时,它将暂停我的jframe执行其他活动,因为程序必须等待任务完成。

我将此方法用于文件列表

File[] files = directory.listFiles();

enter image description here

如何使文件列表仍在运行时,我们的jframe能够继续进行其他活动

答案详情:

http://www.javacreed.com/swing-worker-example/

1 个答案:

答案 0 :(得分:2)

Swing是一个单线程框架,这意味着任何长时间运行或阻塞进程都会阻塞Event Dispatching Thread,它负责处理事件队列,包括处理重绘事件。

不要这样做......

有关详细信息,请参阅Concurrency in Swing

您可以使用某种背景Thread,但Swing也不是线程安全的,因此如果您打算在处理时更新UI,则需要确保在上下文中调用更新事件调度线程。

为简化此操作,您可以使用SwingWorker进行此操作,请参阅Worker Threads and SwingWorker

例如:How to search subfolders and repaint a jTable with new data in Java?