Eclipse отлично работает внутри контейнера, и его окно видно на хосте (при этом X11 используется совместно с сокетом).Неустранимая ошибка при запуске приложения GUI JavaFX внутри Eclipse в контейнере Docker
Приложение представляет собой проект RCP Eclipse с использованием JavaFX (Efxclipse и M2Eclipse). Я удалил все ссылки для RCP ниже, чтобы иметь меньшую сложность в примере и потому, что это происходит с действительно простыми приложениями JavaFX (кроме OSGI), поэтому OSGI не является эмитентом.
Произошла следующая фатальная ошибка при запуске приложения GUF для JavaFX внутри Eclipse (внутри контейнера 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
#
Полный лог можно найти here.
Хост:
- Ubuntu 16,10
- Docker версия 1.12.3, построить 6b644ec
Контейнер детали:
- Ubuntu 16.04
- Oracle JDK 1.8.0_111 64бит
- Eclipse, Luna (RCP 4.4.2) с электронной (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);
}
}
Хотя у меня был успех при запуске простого графического интерфейса с использованием 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(); } }); } }
, и это приводит нас к некоторой проблеме, связанной с JavaFX.
Даже запустив экспортированное приложение JavaFX (как файл Jar) на консоли (вне Eclipse), он возвращает ту же ошибку.
Идеи о том, как его решить и иметь приложение JavaFX, работающее внутри Eclipse в контейнере?
Благодаря
Возможный дубликат: http://stackoverflow.com/q/16296753/18157 - Не дублировать, потому что я не знаю Докера достаточно, чтобы сказать, отвечает ли он на вопрос OP. –
Благодарим за комментарий @JimGarrison, но это не дублируется/тот же случай. Eclipse хорошо работает внутри контейнера (разделяя X-сокет). Проблема заключается только в приложении JavaFX. – wcomnisky
Аварийный аварийный кадр: # C [ld-linux-x86-64.so.2 + 0x9d20] показывает, что это больше проблема glibc, указывает на точный путь и повторно запускают ваше приложение – Fairoz