首页 > 解决方案 > 构建和运行 JavaFX .jar 文件时出现问题

问题描述

我很难让我的 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,我能够运行使用命令行以相同方式构建的非 JavaFX 应用程序java -jar name.jar。当我尝试从命令行运行 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 设置为使用外部库 .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,因为当我尝试通过 运行 hello world 程序时java -jar name.jar,它说该文件是使用比当前 java 可以运行的新版本编译的,这在我下载 LATEST JRE 时没有任何意义。现在,我拥有 JDK 14 的所有与 Java 相关的变量和可运行文件,它可以很好地运行基本的 Java 程序,但如果没有上述错误,我似乎无法让它运行我的 JavaFX .jar。我会换成其他适合构建 GUI 应用程序的编程语言,或者使用 Java Swing 之类的,但是我有不到一个月的时间来完成这个项目,而且我负担不起从以前没有使用过的东西重新开始......

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

标签: javajavafxjarjavafx-11

解决方案


I experienced error messages by following the example from OpenJFX. I found if I swapped the order from (--module-path --add-modules) to (--add-modules --module-path), I was able to make it work. Also, I had to provide the full address of the module-path versus using the environment variable. Hope that gives you some ideas.


推荐阅读