javafx - 在 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。
解决方案
JavaFX SDK 中包含的 JavaFX JAR 不包含本机代码。相反,所述代码在bin
目录中。这意味着您创建的自定义运行时映像jlink
没有运行 JavaFX 所需的本机代码。你有两个选择:
从Gluon 下载 JMOD 文件并在创建自定义运行时映像时使用这些文件。您可以将 JMOD 文件放在
--module-path
而不是常规 JAR 文件上。- 请注意,获取 JMOD 文件的另一种方法是使用包含 JavaFX 的 JDK 发行版。Oracle 可能不再提供此类分发,但其他分销商仍然提供它们(例如 Azul Zulu、BellSoft Liberica 等)。如果您有一个包含 JavaFX 的 JDK,那么您不需要将 JavaFX 放在 .
--module-path
,只需确保在打包和执行期间(通过requires
指令或--add-modules
参数)解析 JavaFX 模块。
- 请注意,获取 JMOD 文件的另一种方法是使用包含 JavaFX 的 JDK 发行版。Oracle 可能不再提供此类分发,但其他分销商仍然提供它们(例如 Azul Zulu、BellSoft Liberica 等)。如果您有一个包含 JavaFX 的 JDK,那么您不需要将 JavaFX 放在 .
使用发布到 Maven Central 而不是 SDK 的 JavaFX JAR。Maven Central JAR 嵌入了本机代码。
在这两种情况下,请确保为您的操作系统使用 JMOD/JAR 文件——JavaFX 是特定于平台的。
我相信第一个选项是最好的。当使用带有本机代码的 JMOD 文件时jlink
,自定义运行时映像包含与特定于 JRE 的本机代码相同的方式。如果您使用第二种方法,本机代码仍将包含在自定义运行时映像中,但必须先将其提取到您计算机上的某个位置(例如<user-home>/.openjfx
),然后才能使用它1。换句话说,第一个选项更干净。
1. 请注意,此提取是由 JavaFX 自动完成的。
推荐阅读
- python - 如何使用 Python 从 Firebase 存储中检索图像?
- ionic-framework - 动态显示离子列表中的离子项
- c++ - 二维数组,一个是已知的,另一个是未知的
- javascript - 如何在 $http GET 方法中设置参数以从下拉 Angularjs 发送数据
- java - Spring Security BadCredentialsException
- javascript - 如果我不返回值,可以使用简洁的箭头函数语法吗?
- html - Div 不应用border-radius 属性
- r - 为R中的空行赋值
- openssl - Openssl cms 签名中是否有任何选项可以查看该特定版本中可用的所有签名算法
- xcode - Xcode 10.1 未从 10.0 更新