JavaFX 应用程序未启动。我怎样才能找出原因?

JavaFX app doesn't launch. How can I find out why?

我使用 IntelliJ、Java17 和 JavaFX 17.0.x 在 Os X 上创建了一个小型 JavaFX 应用程序。

jar 文件是作为人工制品构建的。然后使用 jpackage 将 jar 文件转换为 DMG 文件。该应用程序已成功签名和公证,它在我的本地 Os X 10.15 机器上完美运行,就像一个魅力。

在另一台设备上测试本机应用时,它无法打开。来自 OS X 的控制台事件日志应用程序未显示任何错误。

我猜它仍然缺少依赖项。我如何找出问题所在?

[更新 1]

移动原始 Jar 文件后,该应用程序似乎也无法在我自己的设备上运行。使用James_D的信息后,我打开了app包,build.gar里面好像没有Main jar文件。所以看起来 jPackage 命令失败了,尽管它说它已成功构建。

我使用 verbose 重新运行命令,我在巨大的日志中注意到了这一点...

[10:23:10.357] java.io.IOException: Command [/usr/bin/osascript, /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/jdk.jpackage5702973860569608302/config/myFileUploader-dmg-setup.scpt] exited with 1 code
            at jdk.jpackage/jdk.jpackage.internal.Executor.executeExpectSuccess(Executor.java:90)
            at jdk.jpackage/jdk.jpackage.internal.IOUtils.exec(IOUtils.java:205)
            at jdk.jpackage/jdk.jpackage.internal.IOUtils.exec(IOUtils.java:172)
            at jdk.jpackage/jdk.jpackage.internal.MacDmgBundler.buildDMG(MacDmgBundler.java:396)
            at jdk.jpackage/jdk.jpackage.internal.MacDmgBundler.bundle(MacDmgBundler.java:88)
            at jdk.jpackage/jdk.jpackage.internal.MacDmgBundler.execute(MacDmgBundler.java:571)
            at jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Arguments.java:676)
            at jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments(Arguments.java:550)
            at jdk.jpackage/jdk.jpackage.main.Main.execute(Main.java:91)
            at jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:52)

难道这就是原因?我该如何解决这个问题?

我能够找到问题和解决方案,感谢@James_D的反馈。

虽然jpackager提示构建成功,但是包不完整,没有包含主jar文件。我的 jpackage 命令行语句中有错误。

此命令行指令完美运行:

sudo /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home/bin/jpackage --input /Users/tm/xDataStore/xSign/myFileUploader/Build --name myFileUploader --type dmg --main-jar myFileUploader.jar --main-class com.myCompany.myFileUploader.Main --icon /Users/tm/xDataStore/xSign/myFileUploader/icon.icns --mac-sign --mac-signing-key-user-name 'Developer ID Application: <removed> (<removed>)' --verbose

我做错了 2 件事:

  • 我的输入路径错误。这必须是jar文件所在的根文件夹路径(但不包含jar文件名)
  • 主jar文件路径只能是主jar文件的文件名。不要使用完整的文件路径。

折腾了一周,终于成功了...

Ps.

我希望整个 Java 应用构建过程能够得到改进。 Visual Studio 和 Xojo 用户只需按下“构建”按钮即可获得坚如磐石的可执行文件。 Java 开发人员还有很多工作要做...