运行 带有 Visual Studio 代码远程扩展的 JavaFX

Run JavaFX with Visual Studio Code Remote Extension

我已经尝试了几个小时 运行 借助 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(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 被转发到我的显示器,而且 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 中,容器启动后,我只需将库添加到 "Referenced Libraries"。 之后,我不得不调整 launch.json 并添加以下 vmArgs: "vmArgs": "--module-path <Path-to-FX-Folder> --add-modules javafx.controls"

现在,当我 运行 应用程序时,window 将被创建并显示在我的显示器上。