不可重现的崩溃(无错误/异常)。 当我运行一个对话框来选择一个文件夹时,只有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
答案 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();