首页 > 解决方案 > 在 jpackage 之后运行 JavaFX 应用程序

问题描述

我有一些非常菜鸟的问题。我尝试在 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 中。当我尝试运行应用程序消息“无法启动 JVM”弹出时,我找到了带有 Duke 图像的图标和应用程序文件。

有人可以帮助我,我做错了什么?我真的很想完成这项工作并深入研究 JavaFX。

标签: javafxjava-14jpackage

解决方案


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

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

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

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

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


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


推荐阅读