当前位置: 首页 > 知识库问答 >
问题:

在Docker容器中运行Eclipse内部的JavaFX GUI应用程序时出现致命错误

闽经纬
2023-03-14

Eclipse在容器中工作得很好,它的窗口在主机上是可见的(X11通过socket共享)。

该应用程序是一个使用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
#

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

主机详细信息:

    null
    null

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应用程序:

package application;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        JLabel label = new JLabel("Test");
        frame.getContentPane().add(label);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

这就引出了一些与JavaFX有关的问题。

谢谢

共有1个答案

萧飞
2023-03-14

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

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

gtk2-engines
libswt-gtk-3-java
libxslt1.1
libxtst6
libxxf86vm1

我试图只安装其中的一个或两个(一种组合),试图找出哪一个是确切需要的,但结果证明这是耗时的,所以我现在安装所有他们。

 类似资料:
  • docker错误: PS C:\Windows\System32>docker运行测试错误:出现JNI错误,请检查线程“main”java.lang.noClassDeffounderRorr:javax/JMSException在java.lang.Class.GetDeclaredMethods0(本机方法)在java.lang.Class.GetDeclaredMethods(class.j

  • 我在我的项目中创建了以下Dockerfile来容器化Spring app 无论我是否尝试在ADD./spring-boot-app.jar/app/app.jar中提供jar文件的完整项目路径,仍然会导致以下错误- 但是当运行命令docker-compose up时,它没有将spring boot app容器与mysql容器链接起来,并给出通信链接失败错误。这可能是因为Dockerfile入口点。

  • 错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”c:\program files\docker toolbox\docker.exe:来自守护进程的错误响应:oci运行时错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”。

  • 我在一个容器中运行Kafka,希望能够运行一个简单的命令来更改Java应用程序(Spring Boot)主题上的分区数。 我尝试过ProcessBuilder,但从我读到的任何错误消息来看,我无法通过ProcessBuilder来完成。 相反,我尝试查看Docker API,但无法理解/找到任何解决方案。 我想做的是:运行:docker exec-it kafka bash,然后在kafka容器内

  • 我已经创建了一个docker映像来测试Angular应用程序,但是我无法在docker容器内从主机连接到正在运行的应用程序。 该图像是使用带有:EXPOSE 4200 8080 80的Dockerfile创建的 我使用命令运行docker容器:docker run-ti-p 4200:4200angulardev/bin/bash 在容器内部,我创建了Angular应用程序,并使用:ng serv