在jpackage之后运行JavaFX应用程序



我有一些非常棘手的问题。我试图在OpenJDK14中用jpackage为我的测试应用程序创建安装。以下是我所做的:

首先,使用创建自定义JRE

jlink --module-path "C:Javajavafx-sdk-14lib" --add-modules javafx.controls,javafx.fxml --output hellomyjre

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

jpackage --name HelloFX --input hello --main-jar HelloFX.jar --runtime-image hellomyjre

这创建了.msi文件,我运行它,它在我的Win10应用程序中创建了条目。当然,我不知道如何在windows菜单中找到它,但它位于我的C:\Program Files\HelloFX中。当我试图运行应用程序时,我找到了带有Duke图像的图标和应用程序文件,弹出"启动JVM失败"。

有人能帮我吗?我做错了什么?我真的很想做这件事,并深入研究JavaFX。

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

  1. 从Gloon下载JMOD文件,并在创建自定义运行时映像时使用这些文件。您可以将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 JAR嵌入了本机代码。

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

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


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

最新更新