我已经尝试了几个小时来在Docker容器中借助Visual Studio远程开发扩展来运行JavaFX应用程序。我想在X11的帮助下转发应用程序的图形。我已经在容器中集成了X11所需的软件包,设置了DISPLAY环境变量并将X11套接字安装在容器中(/tmp/.X11-unix/)。不幸的是,它不会那样工作...每当我尝试运行该应用程序时,都会收到以下错误消息:
root@c0699153fc1c:/workspaces/JavaFX/src# java --module-path /usr/share/openjfx/lib/ --add-modules javafx.controls,javafx.fxml HelloWorldApplication.java
Graphics Device initialization failed for : es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
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.launchApplication1(LauncherImpl.java:678)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
我正在使用openjdk:11作为docker容器的基础映像,并在其中安装了以下软件包:
我以前已经尝试在Docker容器中运行IntelliJ,这很好。 GUI被转发到我的Display,并且JavaFX应用程序在其中也可以正常工作。
非常感谢您在此问题上的帮助。也许我监督了一些事情。
编辑:我想我找到了问题。即使我遵循了大量的教程,OpenJDK:11和OpenJFX似乎也无法正常工作。因此,我现在要做的是导出IntelliJ IDEA随附的JDK,并将其安装到容器中,该容器由VS Code创建。用安装的编译器编译.java文件并执行后,它可以正常工作。
所以,现在我唯一的问题是,我需要在VS Code中进行有效的设置才能使JavaFX应用程序正常工作->因此需要正确的OpenJDK和OpenJFX配置。
最后,我能够解决问题。因此解决方案是:
我创建了一个自己的Dockerfile,在此我以openjdk:12
映像为基础,并将JavaFX库(从这里从https://gluonhq.com/products/javafx/获得)复制到了容器中。此外,我添加了X11的所有必需软件包(如上所述)。在VS Code中,启动容器后,我只需要将库添加到“参考库”中。之后,我必须调整launch.json并添加以下vmArgs:"vmArgs": "--module-path <Path-to-FX-Folder> --add-modules javafx.controls"
现在,当我运行该应用程序时,将创建该窗口并将其显示在我的显示器上。