【发布时间】:2025-11-27 16:55:02
【问题描述】:
从 IntelliJ 2016.1 社区版运行以下缩小示例时,我总是遇到分段错误:
import javax.swing.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class Repro extends Application {
public static void main(String[] args) {
JFrame swingFrame = new JFrame();
swingFrame.setTitle("Repro start");
swingFrame.setSize(200, 350);
swingFrame.setVisible(true);
Application.launch(args);
}
@Override
public void start(Stage stage) throws Exception {
Pane root = new Pane();
root.setMinHeight(200);
root.setMinWidth(350);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
}
环境如下:
- Ubuntu 15.10
- openjdk-8 (1.8.0_u66 build 17)
- openjfx-8 (8u60-b27-4)
- IntelliJ 2016.1 社区版(内部版本 #IC-145.258)
将javac 运行到java 中无法重现该问题
通过oraclejdk(1.8.0_u77-b03)运行时也没有显示该问题
作为参考,程序的“输出”如下:
Prism-ES2 Error : GL_VERSION (major.minor) = 1.4
Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" Exception in thread "JavaFX Application Thread" #
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (safepoint.cpp:712), pid=16937, tid=140197878814464
# fatal error: Illegal threadstate encountered: 6
#
# JRE version: OpenJDK Runtime Environment (8.0_66-b17) (build 1.8.0_66-internal-b17)
# Java VM: OpenJDK 64-Bit Server VM (25.66-b17 mixed mode linux-amd64 compressed oops)
# 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/vogel612/.../hs_err_pid16937.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
Process finished with exit code 134
运行ulimit -c unlimited并重启IntelliJ后问题依旧
根据要求,可在this gist. 获得此类执行的错误日志
如何解决此问题?
【问题讨论】:
-
以下没有多大意义。
I was able to get someone to run it (Oracle JDK) for me under Windows。您遇到了OpenJDK under Ubuntu的问题。要确认错误,您要求某人运行Oracle JDK under Windows。它证实了什么?It does not happen under Windows还是it does not happen with Oracle JDK?在Ubuntu下先尝试Oracle JDK。 -
虽然这显然不能证明 JVM 崩溃是合理的,但 Swing 代码不应该在 AWT 事件分派线程之外运行。我有兴趣了解当 Swing 代码被放置在 EventQueue.invokeLater 或 EventQueue.invokeAndWait 调用中时是否会发生崩溃,就像它应该的那样。
-
@SubOptimal 花了一些时间,但是当我将执行 jdk 设置为 oracle 1.8.0_u77(当前可从 webupd8team 的 ppa 获得)时,我无法重现
-
@VGR 将
swingFrame.setVisible的呼叫转移到SwingUtilites.invokeLater后问题仍然存在 -
如果 Oracle JDK 没有出现这种情况,则可能是 OpenJDK 中的错误。您能否发布来自
hs_err_pid16937.log的信息,此时它在JVM 中崩溃。
标签: java swing intellij-idea javafx openjdk