InternalError 运行 Linux Windows 子系统上的 JavaFX 15 应用程序
InternalError running JavaFX 15 application on Windows Subsystem for Linux
我在尝试 运行 JavaFX 15 应用程序时卡住了 Windows 子系统 Linux WSL2 / Ubuntu 20.04,需要建议接下来要尝试的步骤。
到目前为止,我已经能够 运行 我通常在 WSL 中 Windows/JDK15 上进行的所有 Java 构建,包括那些具有 Swing / AWT 依赖项的构建。 AWT / Swing 测试应用程序 运行 在 WSL 中成功并引用了 JDK15,并且 运行ning X Windows on Windows 10。但是我无法获得任何 JavaFX应用于 运行,甚至 HelloFX 示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
我已经在 Windows - X/Cygwin、X410、VcXsrv 和 XMing 上尝试过各种 X 服务器。这是 运行ning HelloFX 与 VcXsrv 时的错误消息:
> echo $PATH_TO_FX
/mnt/c/linux/javafx-sdk-15/lib
> $JAVA_HOME/bin/java -version
openjdk version "15" 2020-09-15
OpenJDK Runtime Environment (build 15+36-1562)
OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)
> $JAVA_HOME/bin/java --module-path $PATH_TO_FX --add-modules javafx.controls -cp build/classes HelloFX
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Prism-ES2 Error : GL_VERSION (major.minor) = 1.4
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.UnsupportedOperationException: Internal Error
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$new(GtkApplication.java:189)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:171)
at javafx.graphics/com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
at javafx.graphics/com.sun.glass.ui.Application.run(Application.java:144)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:280)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:269)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
... 5 more
其他一些网站,例如
提及 export LIBGL_ALWAYS_INDIRECT=1
的使用。使用此设置,不会打印 2 libGL error
条消息,但我得到相同的错误堆栈。
来自相同 bash 的 swing/AWT java 应用程序 运行 具有相同的 DISPLAY
运行 很好,没有错误。我正在使用 OpenJDK15 Linux and Gluon JavaFX 15。我还尝试 jlink
使用 JDK15 和 JavaFX 模块制作 JRE - 同样的错误消息。
按照建议,当 运行 -Djdk.gtk.verbose=true
出现以下消息时:
checking GTK version 3
trying GTK library libgtk-3.so.0
trying GTK library libgtk-3.so
trying GTK library libgtk-x11-2.0.so.0
trying GTK library libgtk-x11-2.0.so
感谢@José Pereda 和@mipa 的评论,他们帮助我解决了问题,添加了 libgtk-3
sudo apt install libgtk-3-0
我在尝试 运行 JavaFX 15 应用程序时卡住了 Windows 子系统 Linux WSL2 / Ubuntu 20.04,需要建议接下来要尝试的步骤。
到目前为止,我已经能够 运行 我通常在 WSL 中 Windows/JDK15 上进行的所有 Java 构建,包括那些具有 Swing / AWT 依赖项的构建。 AWT / Swing 测试应用程序 运行 在 WSL 中成功并引用了 JDK15,并且 运行ning X Windows on Windows 10。但是我无法获得任何 JavaFX应用于 运行,甚至 HelloFX 示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
我已经在 Windows - X/Cygwin、X410、VcXsrv 和 XMing 上尝试过各种 X 服务器。这是 运行ning HelloFX 与 VcXsrv 时的错误消息:
> echo $PATH_TO_FX
/mnt/c/linux/javafx-sdk-15/lib
> $JAVA_HOME/bin/java -version
openjdk version "15" 2020-09-15
OpenJDK Runtime Environment (build 15+36-1562)
OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)
> $JAVA_HOME/bin/java --module-path $PATH_TO_FX --add-modules javafx.controls -cp build/classes HelloFX
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Prism-ES2 Error : GL_VERSION (major.minor) = 1.4
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.UnsupportedOperationException: Internal Error
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$new(GtkApplication.java:189)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:171)
at javafx.graphics/com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
at javafx.graphics/com.sun.glass.ui.Application.run(Application.java:144)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:280)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:269)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
... 5 more
其他一些网站,例如 export LIBGL_ALWAYS_INDIRECT=1
的使用。使用此设置,不会打印 2 libGL error
条消息,但我得到相同的错误堆栈。
来自相同 bash 的 swing/AWT java 应用程序 运行 具有相同的 DISPLAY
运行 很好,没有错误。我正在使用 OpenJDK15 Linux and Gluon JavaFX 15。我还尝试 jlink
使用 JDK15 和 JavaFX 模块制作 JRE - 同样的错误消息。
按照建议,当 运行 -Djdk.gtk.verbose=true
出现以下消息时:
checking GTK version 3
trying GTK library libgtk-3.so.0
trying GTK library libgtk-3.so
trying GTK library libgtk-x11-2.0.so.0
trying GTK library libgtk-x11-2.0.so
感谢@José Pereda 和@mipa 的评论,他们帮助我解决了问题,添加了 libgtk-3
sudo apt install libgtk-3-0