Error: JavaFX runtime components are missing, (Permanent Solution)

Error: JavaFX runtime components are missing, (Permanent Solution)

我知道你可以通过添加

来解决这个问题

--module-path "pathToLib" --add-modules javafx.controls,javafx.fxml,javafx.graphics 当 运行 在命令行中打开 jar 文件时。

但我的问题是,是否没有永久性的解决方案来解决系统设置或配置中的这个错误并能够 运行 jar 文件像 java -jar myfile.jar 一样正常,而不是每次我想添加模块 java --module-path "C:\Users\..\Downloads\javafx-sdk-17.0.2\lib" --add-modules javafx.controls,javafx.fxml,javafx.graphics -jar myfile.jar

我也知道你可以为每个 jar 文件制作一个脚本来执行这个操作,但我在想像系统设置或配置这样的东西将适用于所有 jar 文件 javafx,并且能够 运行 像 java -jar myFile.jar

一样正常的 jar 文件

我正在使用 Ant 作为构建工具。

推荐的备选方案

请参阅 packaging resources of the JavaFX tag 以了解推荐的 jar 分发的替代解决方案:jlink、jpackage 或本机映像。

使用包含 JavaFX

的 JRE

Pre-installed 包含 JavaFX 的 JRE,例如某些 Bellsoft、Zulu 和 Corretto 发行版,将执行 JavaFX 应用程序而无需额外的模块说明符,因为它们包含 Java基本模块设置中的 FX 模块用于其分发。

请注意,如果您想要 JDK 包含 JavaFX(不是所有 JDK 包括 JavaFX):

  • 对于 BellSoft,下载并安装“完整 JDK”,而不是“标准 JDK”。
  • 对于 Zulu,下载并安装包类型“JDK FX”,而不是“JDK”。

您还可以创建自己的 JRE 发行版,其中包括使用 jlink 的 JavaFX 模块(这实际上比听起来更简单)。

使用 ant 构建包含 App 和 JavaFX 组件的单个 JAR

But I still hope that there might be a solution for the above while working with ANT as building tool for JavaFX.

这个答案中有一些关于使用 ant 构建模块化 JavaFX 应用程序的信息:

虽然这可能不是您要找的一切。

要使用 ant 创建单个可执行 jar,您可以尝试在 classpath answer:

上模拟此 Maven JavaFX 阴影的输出

但是使用 ant 任务来构建巨大的阴影 jar 而不是 maven。我没有明确的说明,你需要自己努力完成 non-trivial 任务。

创建的 jar 将包含启动器 class、您的应用程序代码、依赖库代码、JavaFX java 和本机代码。只要您包含相关平台的本机代码,该 jar 将在任何现代 JRE 上 运行。该 jar 将 运行 在不受支持的 class 路径配置中。

Zip 分布

或者(更好)创建一个 zip 分发:

  1. 仅将您自己的代码放入您的应用程序 jar。

  2. 将依赖库和 JavaFX 模块放在 lib 目录中。

  3. 创建一个脚本来调用 Java 使用您的 jar 文件 运行 添加了 lib 目录中的模块。

  4. 尽可能使您的应用程序模块化:

    • 定义一个module-info.java.
    • 对于某些应用,此步骤并非绝对必要或合理可行。
  5. 使用 ant 将所有内容放在一个 zip 文件中以供分发。

  6. 如果需要,请在 zip 中包含 jlink 生成的 JRE。

注意:maven JavaFX 插件,一旦正确配置,可以用一个命令完成大部分任务:

mvn javafx:jlink

附加信息