GtkLookAndFeel在Oracle Jre上致命崩溃

Lal*_*and 8 java gtk swing look-and-feel fatal-error

每当我检查是否支持GtkLookAndFeel时,我遇到了JRE崩溃的问题.令人惊讶的是,这个错误似乎只出现在Oracle JRE上.

到目前为止,我已经测试了三个JRE的行为:

(我正在使用所有这些的64位版本)

  • OpenJDK运行时环境(IcedTea 2.5.1)(7u65-2.5.1-4) - >运行正常
  • Java(TM)SE运行时环境(版本1.7.0_67-b01) - >崩溃
  • Java(TM)SE运行时环境(版本1.8.0_20-b26) - >崩溃

以下是触发此错误的代码:

import javax.swing.LookAndFeel;
public class Test
{
    public static void main(String[] args)
    {
      LookAndFeel currLAF = new com.sun.java.swing.plaf.gtk.GTKLookAndFeel();
      currLAF.isSupportedLookAndFeel();
      System.out.println("I am exiting main");
    } 
}
Run Code Online (Sandbox Code Playgroud)

以下是结果输出:

I am exiting main
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f91fe0fdbe0, pid=332, tid=140265730119424
#
# JRE version: Java(TM) SE Runtime Environment (7.0_67-b01) (build 1.7.0_67-b01)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  0x00007f91fe0fdbe0
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/ethan/fail/hs_err_pid332.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#
Run Code Online (Sandbox Code Playgroud)

请注意,程序退出main后才会崩溃.

作为参考,我正在使用64位debian测试机进行开发,并且我已经验证了其他GTK + apptications的工作原理.

我应该向Oracle报告这个问题,还是我做错了什么?

Rez*_*kin 1

我肯定会向 Oracle 提交错误报告。我记得很多年前,类似的事情也发生在我身上。您已经完成了尽职调查并在多个运行时环境中进行了测试,并且已经确定(至少在上层)发生错误的位置。我会告诉他们您所做的一切(如此处所列),并且为了安全起见,如果可以的话,请在几台不同的机器上运行相同的代码。我知道 Java 应该以同样的方式运行,它就是这样设计的,但无论如何都要这样做,这样你至少可以在错误报告中说你是这样做的。

确保遵循此处的这些指南来收集正确的信息、故障转储、系统信息、运行时信息等:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/bugreports.html

如果可以的话,获取核心转储。核心转储对于 Oracle 人员调试实际发生的情况非常有帮助(几乎达到所需的程度)。以下是 Oracle 页面的链接,但您可能需要找到适合您的计算机的具体信息: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/bugreports004.html#CHDJJAJE

从上面的链接:

在 Linux 操作系统上,未处理的信号(例如分段违规、非法指令等)会导致核心转储。默认情况下,核心转储创建在进程的当前工作目录中,核心转储文件的名称为 core.pid,其中 pid 是崩溃的 Java 进程的进程 ID。

ulimit 实用程序用于获取或设置当前 shell 及其后代可用的系统资源的限制。使用 ulimit -c 命令检查或设置核心文件大小限制。确保限制设置为无限制;否则核心文件可能会被截断。

这是 Java Oracle Bug 报告站点的链接: https: //bugreport.java.com/