在 jpackage 之后运行 JavaFX 应用程序

Dal*_*pic 4 javafx java-14 jpackage

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

首先,创建自定义 JRE

jlink --module-path "C:\Java\javafx-sdk-14\lib" --add-modules javafx.controls,javafx.fxml --output hello\myjre
Run Code Online (Sandbox Code Playgroud)

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

jpackage --name HelloFX --input hello --main-jar HelloFX.jar --runtime-image hello\myjre
Run Code Online (Sandbox Code Playgroud)

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

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

Sla*_*law 12

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

  1. 下载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 是特定于平台的。

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


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