java - 构建和运行 JavaFX .jar 文件时出现问题

标签 java javafx jar javafx-11

我很难让我的 JavaFX 应用程序在 IDE 之外运行。我使用的是IntelliJ IDEA 2019.3,并使用openjdk-12进行编译。 JavaFX sdk的版本是11.0.2,我使用外部库jfoenix-9.0.8和jSerialComm-2.6.0。操作系统是 Windows 10,安装了 JDK 14,我能够使用命令行 java -jar name.jar 运行以相同方式构建的非 JavaFX 应用程序。 当我尝试从命令行运行 mu JavaFX .jar 时,我收到此错误消息:

Graphics Device initialization failed for :  d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        ... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:832)

据我所知,所有必需的库都包含在 .jar 中,我跟踪了多个线程并尝试了多种方法,但我总是陷入困境,因为我对构建 Java .jar-s 还很陌生。

还尝试了 openjfx 官方页面上的以下教程,由于外部库的原因,我在尝试以模块化和非模块化方式编译我的应用程序时遇到了问题。

dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX%;%PATH_TO_FOENIX% --add-modules=javafx.controls --add-modules=javafx.fxml --add-modules=jfoenix-9.0.8.jar --add-modules=jSerialComm-2.6.0.jar --add-modules=javafx.graphics -d out @sources.txt & del sources.txt

在 Win cmd 中使用此命令时出现错误:

error: bad name in value for --add-modules option: 'jfoenix-9.0.8.jar'
error: bad name in value for --add-modules option: 'jSerialComm-2.6.0.jar'

按照教程将 PATH_TO_FX 设置为正确的位置,并将 PATH_TO_FOENIX 设置为包含 exteranl 库 .jar-s 的位置。尝试过此命令,库名称末尾也没有“.jar”。

当我在与模块对应的文件夹中创建 module-info.java 时,我实际上可以使用命令编译它:

dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX%;%PATH_TO_FOENIX% -d mods/LA_GUI @sources.txt 

但随后我收到错误:

Error: Module javafx.fxml not found, required by LA.GUI

当我尝试使用 jlink 构建图像时。 openjfx 上的示例提供非常简单,因此我可能会在这里省略一些内容。就是这样。尝试在 Intellij 中添加对 Maven 的框架支持,但 Maven 在查找不同的包时遇到问题,并且在尝试运行 Maven 测试的每个解决错误后,又出现了另一个错误,所以我放弃了,因为我以前从未使用过它,并且不知道我是否可以让它工作,如果使用 Maven 的 .jar 生成器与我现在的生成器有什么不同..

旁注:我从笔记本电脑中删除了最新的 JRE,因为当我尝试通过 java -jar name.jar 运行 hello world 程序时,它说该文件是使用比当前 java 更新的版本编译的可以运行,这没有任何意义,因为我下载了最新的 JRE。现在我拥有 JDK 14 的所有 java 相关变量和可运行对象,它可以很好地运行基本的 java 程序,但我似乎无法让它在没有上述错误的情况下运行我的 JavaFX .jar。我本来会换成其他适合构建 GUI 应用程序的编程语言,或者使用 Java Swing 之类的东西,但我只有不到一个月的时间来完成这个项目,而且无法从头开始使用我以前没有使用过的东西。

编辑:这是我尝试运行的 .jar 文件内容的屏幕截图: .jar file contents

最佳答案

我按照 OpenJFX 中的示例遇到了错误消息。我发现如果我将顺序从 (--module-path --add-modules) 交换到 (--add-modules --module-path),我就能使其工作。另外,我必须提供模块路径的完整地址,而不是使用环境变量。希望能给您一些想法。

关于java - 构建和运行 JavaFX .jar 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61285981/

相关文章:

JavaFX 图表自动缩放错误的低数字

java - 是否可以在运行时写入存储在 JAR 中的设置 XML?

java - 检测 Java JAR/代码篡改

java - ZipInputStream 和 JarInputStream 的 ZipEntry 大小不一致

java - 来自 Groovlet (Groovy Servlet) 的 JSP PageContext

java - 在 Spring 中定义 @ManyToOne 关系后,如何访问底层列?

JavaFx 资源 (css) 和 OSGi

java - 如何在任何 Pane 中定位 JavaFX 形状?

java - 当数组未满时如何比较字符与数组

java - JHipster 如何在文件系统中保存文件?