2017-01-13 10 views
1

Eclipseはコンテナ内で正常に動作しており、そのウィンドウはホスト上で表示されます(X11はソケットで共有されます)。Dockerコンテナ内のEclipse内でJavaFX GUIアプリケーションを実行すると致命的なエラーが発生する

このアプリは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 
# 

完全ログはhereです。

ホストの詳細は

  • のUbuntu 16.10
  • ドッカーバージョン1.12.3、コンテナがの詳細を

    6b644ec

を構築:

  • のUbuntu 16.04
  • OracleのJDK 1.8.0_111 64-ビット
  • EclipseのルナE(FX)と(RCP 4.4.2)ザ・クリプス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); 
    } 
} 

スイングを使用して簡単な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に関連する問題を引き起こします。

エクスポートされたJavaFXアプリケーション(Jarファイルとして)をコンソール(Eclipse外)で実行しても、同じエラーが返されます。

これを解決し、JavaFXアプリケーションをコンテナ内のEclipse内で実行する方法についてのアイデアはありますか?

+0

可能なdup:http://stackoverflow.com/q/16296753/18157 - 私はDockerがOPの質問に答えるかどうかを十分に知らないので、dup-hammeringではありません。 –

+0

@ JimGarrisonに感謝してくれてありがとうございますが、重複しているわけではありません。 Eclipseはコンテナ内でうまく動作しています(ソケットを介してXを共有しています)。問題はJavaFXアプリケーションだけです。 – wcomnisky

+0

クラッシュ問題フレーム:#C [ld-linux-x86-64.so.2 + 0x9d20]は、glibcの問題の詳細を示し、正確なパスを指し、アプリケーションを再実行します – Fairoz

答えて

0

問題

おかげで、私のUbuntuの画像のいくつかの不足している依存関係に関連していました。それらがなければ、私はDockerコンテナでJavaFXアプリケーションを実行することができませんでした。以下のパッケージをインストールする

が問題を解決:

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

私は(組み合わせの一種)、1つまたは2つのそれらのをインストールしようとしたまさに必要とされている1を見つけるための試みでそれが判明しました時間がかかるので、私はそれらのすべてをインストールしています - 今のところです。

Githubでサンプルを検索すると、このDockerfileの解決策が見つかりました。ありがとうPatrick Martin

関連する問題