运行 jpackage 后的 JavaFX 应用程序

running JavaFX application after jpackage

我有一些非常菜鸟的问题。 我尝试在 OpenJDK 14 中使用 jpackage 为我的测试应用程序创建安装。这是我所做的:

首先,使用

创建自定义 JRE
jlink --module-path "C:\Java\javafx-sdk-14\lib" --add-modules javafx.controls,javafx.fxml --output hello\myjre

那是成功的。我从 运行 配置中复制了我的 Eclipse 中的参数。之后使用 jpackage

安装
jpackage --name HelloFX --input hello --main-jar HelloFX.jar --runtime-image hello\myjre

我创建了 .msi 文件,我 运行 它在我的 Win10 应用程序中创建了条目。当然,我不知道如何在 windows 菜单中找到它,但它放在我的 C:\Program Files\HelloFX 中。当我尝试 运行 应用程序消息 "Failed to launch JVM" 弹出时,我找到了带有 Duke 图像的图标和应用程序文件。

谁能帮帮我,我做错了什么?我真的很想完成这项工作并深入研究 JavaFX。

JavaFX SDK 中包含的 JavaFX JAR 不包含本机代码。相反,所述代码位于 bin 目录中。这意味着由 jlink 创建的自定义 运行time 图像没有 运行 JavaFX 所必需的本机代码。您有两个选择:

  1. 下载 JMOD 文件 from Gluon 并在创建自定义 运行time 图像时使用这些文件。您可以将 JMOD 文件放在 --module-path 而不是 常规 JAR 文件。

    • 请注意另一种获取 JMOD 文件的方法是使用包含 JavaFX 的 JDK 发行版。 Oracle 可能不再提供此类发行版,但其他发行商仍提供它们(例如 Azul Zulu、BellSoft Liberica 等)。如果您有一个包含 JavaFX 的 JDK,那么您不需要将 JavaFX 放在 --module-path 上,只需确保在打包和执行期间解析 JavaFX 模块(通过 requires 指令或 --add-modules 个参数)。
  2. 使用发布到 Maven Central 的 JavaFX JAR 而不是 SDK。 Maven Central JARs 嵌入了本机代码。

在这两种情况下,请确保为您的操作系统使用 JMOD/JAR 文件——JavaFX 是特定于平台的。

我认为第一个选项是最好的。当使用带有 jlink 的 JMOD 文件时,本机代码包含在自定义 运行time 图像中,其方式与特定于 JRE 的本机代码相同。如果您使用第二种方法,本机代码仍将包含在自定义 运行time 图像中,但必须将其提取到计算机上的某个位置(例如 <user-home>/.openjfx)才能使用1。换句话说,第一个选项更干净。


1.请注意,此提取由 JavaFX 自动完成。