JFileChooser.showOpenDialog上java崩溃的1/10倍

时间:2010-12-17 11:06:03

标签: java crash openfiledialog jfilechooser

不可重现的崩溃(无错误/异常)。 当我运行一个对话框来选择一个文件夹时,只有10次中有1次发生。代码:

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 - >任务管理器 - >杀了它 - > 然后我得到“Java(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

3 个答案:

答案 0 :(得分:2)

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

那将是你的NVidia视频驱动程序吗?

请注意,这不是AWT EDT线程,而是内部系统线程。您可以尝试禁用Direct Draw 3D(这样做有一些系统属性)。

答案 1 :(得分:2)

我在Windows上看到类似这样的东西,当JVM运行时非常接近分配给它的最大内存。然后用户打开一个对话框,可能在网络驱动器上,这会加载一些额外的OS资源(可能是DLL),然后JVM耗尽内存(不是堆,而是分配给JVM本身的内存),然后崩溃。

答案 2 :(得分:1)

确保在EDT上调用代码。

另外,只是一个观察(与崩溃无关),最好声明变量fileChooser并在同一语句中指定它(不变性):

final JFileChooser fileChooser = new JFileChooser();