我怎样才能让JFileChooser中与断开网络驱动器检点?(How can I make JFil

2019-10-17 04:43发布

当我创建一个系统上一个JFileChooser与断开网络驱动器被显示在JFileChooser中之前永远需要。 它会阻止EDT与一个断开连接的网络驱动器20s左右。

看起来这是一个常见的问题,但我不能找到一个方法来解决它。 我已经看到了可能的选项:

  • 使用JFileDialog
  • 与一个其中getRoots()返回驱动器的固定列表替换的FileSystemView
  • 试图打开的JFileChooser之前切换到等待光标(S)
  • 在启动时创建一个JFileChooser,并保持它撒手人寰
  • 尝试使用xfiledialog

我的使用情况是如此简单,我讨厌诉诸第三方库。 其他选项都显得很糟糕我虽然。

任何其他的建议?

也许谁提交的家伙这 13年前的错误报告在这里游逛,并通过它现在想通了。

更新了代码,并记录输出

下面是我使用这个代码。

private void initFileChooser() {
    log.debug("Initializing fileChooser.");

    fileChooser = new JFileChooser();
    log.debug("FileChooser instantiation complete.");

    fileChooser.setFileFilter(new FileNameExtensionFilter("PDF Files", "pdf"));
    log.debug("File filter setup complete.");

    fileChooser.setMultiSelectionEnabled(false);
    log.debug("Multi-selection disabled.");

    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    log.debug("File selection mode set to files only.");
}

这里的日志输出时,上面的代码没有断开网络驱动器上运行。

05:37:13.126 [AWT-EventQueue-0] DEBUG - Initializing fileChooser.
05:37:13.481 [AWT-EventQueue-0] DEBUG - FileChooser instantiation complete.
05:37:13.482 [AWT-EventQueue-0] DEBUG - File filter setup complete.
05:37:13.482 [AWT-EventQueue-0] DEBUG - Multi-selection disabled.
05:37:13.482 [AWT-EventQueue-0] DEBUG - File selection mode set to files only.

这里的日志输出时,上面的代码通过使用在Windows 7上我创建一个断开连接的网络驱动器断开连接的网络驱动器运行ExpanDrive初始连接后(1.8.4)连接到一台Linux机器和关闭Linux机器而成。

05:37:58.953 [AWT-EventQueue-0] DEBUG - Initializing fileChooser.
05:38:11.108 [AWT-EventQueue-0] DEBUG - FileChooser instantiation complete.
05:38:11.110 [AWT-EventQueue-0] DEBUG - File filter setup complete.
05:38:11.110 [AWT-EventQueue-0] DEBUG - Multi-selection disabled.
05:38:11.110 [AWT-EventQueue-0] DEBUG - File selection mode set to files only.

Answer 1:

你封锁EDT,可能与RepaintManager ,该情况下的例外Network Drive不入店或返回一个异常,你必须

  • 使用SwingWorkerRunnable#Thread

  • 通知用户"Please wait, whatever ...."

  • 如果成功,则显示JFileChooserFiles

  • 否则,你的GUI冻结,直到网络驱动器返回的内容或异常



文章来源: How can I make JFileChooser behave properly with disconnected network drives?