Eclipse fonctionne correctement dans le conteneur et sa fenêtre est visible sur l'hôte (le X11 étant partagé via le socket).Erreur irrécupérable lors de l'exécution d'une application JavaFX GUI dans Eclipse dans un conteneur Docker
L'application est un projet Eclipse RCP utilisant JavaFX (Efxclipse et M2Eclipse). J'ai supprimé toutes les références pour le RCP ci-dessous pour avoir moins de complexité dans l'exemple et parce que cela arrive aussi avec des applications JavaFX très simples (non OSGI) - OSGI n'est donc pas l'émetteur.
L'erreur fatale suivante se produit lors de l'exécution d'une application JavaFX GUI dans Eclipse (à l'intérieur d'un conteneur 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
#
Le journal complet peut être trouvé here.
Détails de l'hôte:
- Ubuntu 16.10
- Docker la version 1.12.3, construire 6b644ec
détails Container:
- Ubuntu 16.04
- Oracle JDK 1.8.0_111 64bits
- Eclipse Luna (RCP 4.4.2) avec e (fx) clipse 1.2.0.201501301049
- Dockerfile
Code pour l'application 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);
}
}
Bien que j'ai réussi à exécuter une application GUI simple en utilisant Swing:
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(); } }); } }
et cela nous a conduit à un problème lié à JavaFX.
Même en exécutant une application JavaFX exportée (en tant que fichier Jar) sur la console (en dehors d'Eclipse), elle renvoie la même erreur.
Des idées sur comment le résoudre et avoir l'application JavaFX en cours d'exécution dans Eclipse dans le conteneur?
Merci
Dup possible: http://stackoverflow.com/q/16296753/18157 - Pas duper-martelage parce que je ne connais pas assez Docker pour dire si elle répond à la question de l'OP. –
Merci d'avoir commenté @JimGarrison mais ce n'est pas une copie/même cas. Eclipse fonctionne bien à l'intérieur du conteneur (partage du X via le socket). Le problème est seulement avec l'application JavaFX .. – wcomnisky
Le crash Problématique frame: # C [ld-linux-x86-64.so.2 + 0x9d20] montre qu'il est plus de problème de la glibc, pointe vers le chemin exact et relance votre application – Fairoz