2

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

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) Platform 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
4

3 回答 3

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

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

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

于 2010-12-17T17:30:42.190 回答
2

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

于 2010-12-17T17:35:43.853 回答
1

确保在 EDT 上调用代码。

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

final JFileChooser fileChooser = new JFileChooser();
于 2010-12-17T11:36:18.843 回答