簡體   English   中英

從IntelliJ運行JavaFX和Swing時的Segfault

[英]Segfault when running JavaFX and Swing from IntelliJ

從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社區版(build#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后問題仍然存在

根據要求, 此要點的錯誤日志可在此要點獲得。

我該如何解決這個問題?

可以在IntelliJ外部重現該錯誤,如下所示。

public class Main {
    public static void main(String[] args) throws Exception {
        new Repro().main(new String[0]);
    }
}

運行java -cp . Main java -cp . Main在Ubuntu 15.10上

openjdk版“1.8.0_66-internal”
OpenJDK運行時環境(build 1.8.0_66-internal-b17)
OpenJDK 64位服務器VM(內置25.66-b17,混合模式)

產生同樣的致命錯誤。 而運行java -cp . Repo java -cp . Repo不會失敗。

運行java -cp . Main java -cp . Main在CentOS 7上

openjdk版本“1.8.0_77”
OpenJDK運行時環境(版本1.8.0_77-b03)
OpenJDK 64位服務器VM(內置25.77-b03,混合模式)

打開Swing JFrame和JavaFX窗格。

似乎這個問題與特定的OpenJDK版本以及調用類Repo的方式有關。

編輯如果您無法切換到另一個Java版本,則可能存在“解決方法”。 (根據這篇文章

修改您的Repro.java如下所示,它不會在OpenJDK Runtime Environment (build 1.8.0_66-internal-b17)上失敗OpenJDK Runtime Environment (build 1.8.0_66-internal-b17)

public static void main(String[] args) throws Exception {
    new JFXPanel(); // the "workaround" to initialize the toolkit
    JFrame swingFrame = new JFrame();
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM