簡體   English   中英

1/10次Java在JFileChooser.showOpenDialog上崩潰

[英]1/10 times java crashes on JFileChooser.showOpenDialog

不可復制的崩潰(無錯誤/異常)。 當我運行對話框以選擇十分之一的文件夾時發生。 碼:

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-> Task Manager-> Kill it->然后我得到“ Java(TM)Platform SE二進制文件沒有響應”,然后單擊“關閉”按鈕

我是在做錯什么還是錯誤?

我找到了崩潰轉儲文件,如下文彼得所述。 這是其中的一些:

#
# 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
# Problematic frame:
# C  [nvd3dum.dll+0x2fff52]

那將是您的NVidia視頻驅動程序嗎?

請注意,這不在AWT EDT線程上,而是在內部系統線程上。 您可以嘗試禁用Direct Draw 3D(這樣做有一些系統屬性)。

當JVM運行時,我在Windows上已經看到了類似的信息,這非常接近操作系統分配給它的最大內存分配。 然后,用戶打開一個對話框,可能在網絡驅動器上,這會加載一些其他OS資源(可能是DLL),然后JVM耗盡內存(不是堆,而是分配給JVM本身的內存),然后崩潰。

確保在EDT上調用了代碼。

另外,僅觀察一下(與崩潰無關),最好聲明變量fileChooser並將其分配到同一條語句中(不可變性):

final JFileChooser fileChooser = new JFileChooser();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM