2010-12-17 17 views
2

再現不可能なクラッシュ(エラー/例外なし)。 フォルダーを選択するダイアログを10回中1回だけ実行すると発生します。コード:JFileChooser.showOpenDialogで1/10倍のJavaクラッシュが発生する

public String getFilePathFromDialog(String dialogTitle) { 
    JFileChooser fileChooser; 
    fileChooser = new JFileChooser(); 
    fileChooser.setDialogTitle(dialogTitle); 
    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 
    fileChooser.setAcceptAllFileFilterUsed(true); 
    if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { 
     return fileChooser.getSelectedFile().toString(); 
    } else { 
     return ""; 
    } 
} 

アプリケーションがクラッシュします。この後、私はだけでそれを閉じることができます: はCtrl + Alt + Deleteを - >タスクマネージャ - >それを殺す - > それから私は を「ジャワ(TM)プラットフォームSEバイナリが応答していない」と私は

閉じるボタンを押してもらいます

私は何か間違っているのですか、それともバグですか?

クラッシュダンプファイルは、下記のPeterとして見つかりました。ここではその一部です:

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x62a5ff52, pid=5516, tid=5312 
# 
# Problematic frame: 
# C [nvd3dum.dll+0x2fff52] 
# 
Current thread (0x04323400): JavaThread "AWT-Windows" daemon [_thread_in_native, id=5312, stack(0x04d60000,0x04db0000)] 
siginfo: ExceptionCode=0xc0000005, writing address 0x04ee9004 
+0

クラッシュする場合は、アプリケーションのデフォルトの作業ディレクトリにクラッシュダンプが必要です。詳細については、このリンクを参照してください。http://stackoverflow.com/questions/1880166/is-it-possible-to-specify-where-jvms-crash-dumps-go Java 6アップデート23を使用していますか? –

+1

そのコンピュータにネットワークドライブがマップされている可能性がありますか? Javaはそれらのネットワークドライブから読み込み、ダイアログにそれらをリストすることがあります。ネットワークが何らかの理由で遅い、または一時的に到達不能になった場合、プログラムがしばらく停止しているように見えることがあります。 – Jesper

+0

私は多くのネットワークドライブを持っています。たぶんそれはこれと関係しています。しかし、それは減速せず、代わりに完全にクラッシュします。すぐに起動するか、永遠にクラッシュします。とにかくありがとう。いい視点ね。私はデスクトップをCurrentDirectory(ダイアログを開始するためのデフォルトのディレクトリ)として設定しました。私はもうそれをしないと思います。あなたのコメントは役に立ちました。 –

答えて

2
# Problematic frame: 
# C [nvd3dum.dll+0x2fff52] 

あなたのNVidiaビデオドライバ?

これはAWT EDTスレッドではなく、内部システムスレッドであることに注意してください。 Direct Draw 3Dを無効にすることもできます(そのためのシステムプロパティがあります)。

+0

私は特定のdll + "Javaエラー"を探して、1.6.0_21で解決されたバグだとフォーラムで述べています。私は更新し、再び現れないことを願っています。 –

1

コードがEDT上で呼び出されていることを確認します。

また、ちょうど観測(クラッシュとは何の関係も)、変数チューザを宣言し、同じ文(不変)でそれを割り当てる方が良いです:でしょう

final JFileChooser fileChooser = new JFileChooser(); 
+2

+1 [EDT](http://en.wikipedia.org/wiki/Event_dispatching_thread)のチェックのためにそれを追加しました。 –

+1

これはスレッドの問題ではありません。 EDTの外部から呼び出しても、JVMはクラッシュしません。 +1はEDTをチェックするための+1のコメントになります。 –

2

WindowsでJVMが動作していたときに、OSによって割り当てられた最大メモリが割り当てられていたときに、このようなことが起こりました。その後、ユーザーはネットワークドライブ上のダイアログを開き、追加のOSリソース(おそらくDLL)をロードし、JVMがメモリ不足になり(ヒープではなくメモリがJVM自体に割り当てられている)、クラッシュします。

関連する問題