递归列出Java中的大量文件和目录导致我的JFrame等待并停止其他活动
如果java列出像C://和D:// root这样的大文件,那么在我的电脑中大约需要大约15分钟。当java执行列表时,它将暂停我的jframe执行其他活动,因为程序必须等待任务完成。
我将此方法用于文件列表
File[] files = directory.listFiles();
如何使文件列表仍在运行时,我们的jframe能够继续进行其他活动
答案详情:
答案 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?