1

ネットワークドライブが切断されたシステムでJFileChooserを作成すると、JFileChooserが表示されるまでに永遠に時間がかかります。切断された単一のネットワークドライブで約20秒間EDTをブロックします。

それは一般的な問題のようですが、私はそれを回避する方法を見つけることができません。私が見た可能なオプションは次のとおりです。

  • JFileDialogを使用する
  • FileSystemViewを、getRoots()がドライブの固定リストを返すものに置き換えます
  • JFileChooserを開こうとする前に、WAITカーソルに切り替えてください
  • 起動時に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.

上記のコードがWindows7で切断されたネットワークドライブで実行された場合のログ出力は次のとおりです。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.
4

1 に答える 1

0

EDT をブロックしました。おそらく、アクセスできない場合や例外を返すRepaintManager場合は例外があります。Network Drive

  • SwingWorkerまたは_Runnable#Thread

  • ユーザーに通知"Please wait, whatever ...."

  • 成功した場合、表示JFileChooserするFiles

  • そうしないと、ネットワーク ドライブがコンテンツまたは例外を返すまで、GUI がフリーズします。

于 2012-09-06T06:28:30.073 に答える