java - 使用 Visual Studio Code 远程扩展运行 JavaFX

标签 java javafx visual-studio-code x11 vscode-remote

我已经尝试了几个小时,在 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 容器的基础镜像,并在其中安装了以下软件包:

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

我之前已经尝试在 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 中,启动容器后,我只需将库添加到“引用库”中即可。 之后,我必须调整 launch.json 并添加以下 vmArgs: "vmArgs": "--module-path <Path-to-FX-Folder> --add-modules javafx.controls"

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

关于java - 使用 Visual Studio Code 远程扩展运行 JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60397091/

相关文章:

debugging - 如何在VSCode中调试AWS SAM制作的应用程序?

visual-studio-code - 目录中的 MarkdownTOC 在更新和插入时用 auto 替换换行符

java - 什么是 Java 字符串实习?

Java缓存和动态更新

java - Android 工具栏项目 OnClickListener

java - 有没有办法消除 JavaFX BarChart 的 strip 和类别间隙

java - Spring 安全: How to Return 503 Service Unavailable?

java - 如何修复jvm选项在gradle idea上将javafx 11导出到com.jfoenix?

windows - Javafx - 在 webview 组件中打开 login.microsoftonline.com 页面

html - VSCode 不自动完成 HTML