Java 如何使JFileChooser在断开连接的网络驱动器上正常工作?
在具有断开连接的网络驱动器的系统上创建JFileChooser时,JFileChooser需要很长时间才能显示出来。它用一个断开连接的网络驱动器将EDT阻塞约20秒 这似乎是一个常见的问题,但我找不到解决办法。我看到的可能选项有:Java 如何使JFileChooser在断开连接的网络驱动器上正常工作?,java,swing,jfilechooser,event-dispatch-thread,Java,Swing,Jfilechooser,Event Dispatch Thread,在具有断开连接的网络驱动器的系统上创建JFileChooser时,JFileChooser需要很长时间才能显示出来。它用一个断开连接的网络驱动器将EDT阻塞约20秒 这似乎是一个常见的问题,但我找不到解决办法。我看到的可能选项有: 使用JFileDialog 将FileSystemView替换为getRoots()返回固定驱动器列表的文件系统视图 在尝试打开JFileChooser之前切换到等待光标 在启动时创建一个JFileChooser,并将其永久保留 试用 我的用例非常简单,我不喜欢求
- 使用JFileDialog
- 将FileSystemView替换为getRoots()返回固定驱动器列表的文件系统视图
- 在尝试打开JFileChooser之前切换到等待光标
- 在启动时创建一个JFileChooser,并将其永久保留
- 试用
private void initFileChooser(){
调试(“初始化文件选择器”);
fileChooser=newjfilechooser();
debug(“FileChooser实例化完成”);
setFileFilter(新文件名扩展过滤器(“PDF文件”,“PDF”));
调试(“文件过滤器设置完成”);
fileChooser.setMultiSelectionEnabled(false);
调试(“禁用多选”);
fileChooser.setFileSelectionMode(仅限JFileChooser.FILES_);
debug(“文件选择模式设置为仅文件。”);
}
下面是在没有断开连接的网络驱动器的情况下运行上述代码时的日志输出
05:37:13.126[AWT-EventQueue-0]调试-初始化文件选择器。
05:37:13.481[AWT-EventQueue-0]调试-文件选择器实例化完成。
05:37:13.482[AWT-EventQueue-0]调试-文件筛选器安装完成。
05:37:13.482[AWT-EventQueue-0]调试-禁用多选。
05:37:13.482[AWT-EventQueue-0]调试-文件选择模式设置为仅文件。
以下是在Windows7上,当上述代码在断开连接的网络驱动器上运行时的日志输出。我正在创建一个断开连接的网络驱动器,方法是使用(1.8.4)连接到Linux机器,并在初始连接完成后关闭Linux机器
05:37:58.953[AWT-EventQueue-0]调试-初始化文件选择器。
05:38:11.108[AWT-EventQueue-0]调试-文件选择器实例化完成。
05:38:11.110[AWT-EventQueue-0]调试-文件筛选器安装完成。
05:38:11.110[AWT-EventQueue-0]调试-禁用多选。
05:38:11.110[AWT-EventQueue-0]调试-文件选择模式设置为仅文件。
您阻止了EDT,可能是由于重新绘制管理器
异常在网络驱动器
无法访问或返回异常的情况下,您必须
- 使用
或SwingWorker
Runnable#Thread
- 通知用户
“请稍候,…”
- 如果成功,则使用
文件显示
JFileChooser
- 否则,GUI将冻结,直到网络驱动器返回内容或异常
FileBro
上关于WinXP
上挂起问题的帖子,对于网络驱动器和我的网络
,当我调用new JFileChooser()
时会发生延迟。该电话必须在EDT Accing上拨打才能接听。我已经用示例代码和日志输出更新了我的问题。不是在文件夹打开一次时,然后缓存通道中的文件内容,直到勾选过期(取决于网络端的本机操作系统和硬件),之前投票认为概念正确。当以后在EDT上调用JFileChooser
时,工作者将不得不做任何必要的事情来最小化延迟。例如,我有一个USB主轴,带有一个硬编码的降速定时器,我只需在其上以稍短的间隔触摸一个隐藏的文件。