1

Eclipse 在容器内运行良好,并且它的窗口在主机上可见(X11 通过套接字共享)。

该应用程序是一个使用 JavaFX(Efxclipse 和 M2Eclipse)的 Eclipse RCP 项目。我删除了下面对 RCP 的所有引用,以降低示例中的复杂性,并且因为它也发生在非常简单的 JavaFX 应用程序(非 OSGI)中 - 所以 OSGI 不是发行者。

在 Eclipse 中(在 Docker 容器中)运行 JavaFX GUI 应用程序时发生以下致命错误。

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f56bb14dd20, pid=233, tid=0x00007f567cea1700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_111-b14) (build 1.8.0_111-b14)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.111-b14 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [ld-linux-x86-64.so.2+0x9d20]
#
# Core dump written. Default location: /home/docker/test/JavaFX/login/core or core.233
#
# An error report file with more information is saved as:
# /home/docker/test/JavaFX/login/hs_err_pid233.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

完整的日志可以在这里找到。

主机详情

  • Ubuntu 16.10
  • Docker 版本 1.12.3,构建 6b644ec

集装箱详情

  • Ubuntu 16.04
  • Oracle JDK 1.8.0_111 64 位
  • 带有 e(fx)clipse 1.2.0.201501301049 的 Eclipse Luna (RCP 4.4.2)
  • Dockerfile

JavaFX 应用程序的代码

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            Scene scene = new Scene(new BorderPane(),400,400);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

尽管我使用 Swing 成功运行了一个简单的 GUI 应用程序:

打包申请;

导入 javax.swing.JFrame;
导入 javax.swing.JLabel;

公共类测试{

    私有静态无效 createAndShowGUI() {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        JLabel 标签 = new JLabel("Test");
        frame.getContentPane().add(label);
        frame.setVisible(true);
    }

    公共静态无效主要(字符串[]参数){
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            公共无效运行(){
                createAndShowGUI();
            }
        });
    }
}

这导致我们遇到一些与 JavaFX 相关的问题。

即使在控制台(Eclipse 外部)上运行导出的 JavaFX 应用程序(作为 Jar 文件),它也会返回相同的错误。

关于如何解决它并使 JavaFX 应用程序在容器中的 Eclipse 中运行的想法?

谢谢

4

1 回答 1

1

该问题与我的 Ubuntu 映像中缺少一些依赖项有关。没有它们,我无法在 Docker 容器中运行 JavaFX 应用程序。

安装以下软件包解决了这个问题:

gtk2-引擎
libswt-gtk-3-java
libxslt1.1
libxtst6
libxxf86vm1

我试图只安装其中的一个或两个(一种组合),试图找出究竟需要哪一个,但结果证明这很耗时,所以我正在安装所有这些 - 现在。

在 Github 上搜索示例时,我在这个Dockerfile上找到了解决方案。谢谢帕特里克·马丁

于 2017-01-25T02:52:12.487 回答