在Docker容器中的Eclipse中运行JavaFX GUI应用程序时发生致命错误

Eclipse在容器内正常工作,并且它的窗口在主机上可见(X11通过套接字共享)。

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

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

# # 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 # 

完整的日志可以在这里find。

主机详情

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

容器详情

  • Ubuntu 16.04
  • Oracle JDK 1.8.0_111 64位
  • Eclipse Luna(RCP 4.4.2)与e(fx)clipse 1.2.0.201501301049
  • 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); } } 

尽pipe我已经成功地使用Swing运行一个简单的GUI应用程序:

包裹申请;

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

公共类testing{

     private static void createAndShowGUI(){
         JFrame frame = new JFrame(“Test”);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setSize(500,500);
         JLabel标签=新的JLabel(“Test”);
         。frame.getContentPane()添加(标签);
         frame.setVisible(真);
     }

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

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

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

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

谢谢

这个问题与我的Ubuntu镜像中缺less的依赖关系有关。 没有他们,我无法在Docker容器中运行JavaFX应用程序。

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

 GTK2-引擎
 libswt-GTK-3的Java
 libxslt1.1
 libxtst6
 libxxf86vm1

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

在Github上search示例时,我在Dockerfile上find了解决scheme。 感谢Patrick Martin 。