使用Visual Studio代码远程扩展运行JavaFX



我已经试着在Docker容器中借助Visual Studio远程开发扩展运行JavaFX应用程序几个小时了。我想在X11的帮助下转发应用程序的图形。我已经在容器中集成了X11所需的包,设置了DISPLAY环境变量,并在容器中安装了X11套接字(/tmp/.X11unix/(。不幸的是,它不会那样工作。。。每当我尝试运行应用程序时,我都会收到以下错误消息:

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容器的基本映像,并在其中安装了以下包:

  • openjfx
  • libx11开发
  • libxext开发
  • libxrender dev
  • libxtst-dev

我之前已经尝试在Docker容器中运行IntelliJ,它运行良好。GUI被转发到我的显示器上,JavaFX应用程序也在那里运行良好。

如果能在这件事上得到任何帮助,我将不胜感激。也许我在监督什么。


编辑:我想我发现了问题。OpenJDK:11和OpenJFX似乎无法正常工作,尽管我学习了大量教程。。。因此,我现在所做的是导出IntelliJ IDEA附带的JDK,并将其安装到容器中,该容器由VS代码创建。在使用安装的编译器编译并执行了.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"

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

最新更新