JavaFX 部署:无法启动 JVM

JavaFX deployment: Failed to launch JVM

问候

我使用由 jpackage 创建的 msi 安装程序部署了一个简单的 JavaFX 应用程序。双击安装在Windows10"program files"目录下的应用程序图标时,显示错误"Failed to launch JVM"。在部署之前,我在命令提示符下测试了应用程序 jar 文件,没有任何问题。检查应用程序安装目录(在"C:\Program files"下)它有所有运行time dlls等等,所以我不确定是什么原因导致这个错误?这是我用来构建 运行time 图像的 japckage 命令:
jpackage  --type msi --name FileChooser -p "%JAVAFX_HOME%\lib;%M2_REPO%;org\openjfx\mavenfxfilechooser\mavenfxfilechooser.jar" --module "org.openjfx.mavenfxfilechooser/org.openjfx.mavenfxfilechooser.FileChooserApp"

更新

按照评论部分给出的建议,我在我的机器上安装了 JMODS,并发出了一个 jpackage 命令行来指向 JMODS 文件而不是 JAVAFX_HOME,如下所示:
jpackage --type msi --name FileChooser -p "%JMODS_HOME%;%M2_REPO%;C:\Users\hrh74\Downloads\Lib\file\org\openjfx\mavenfxfilechooser" --module "org.openjfx.mavenfxfilechooser/org.openjfx.mavenfxfilechooser.FileChooserApp"

我使用 MSI 运行time 映像安装了应用程序,这确实解决了“无法启动 JVM”问题。应用程序启动了,但是,我有一个 WebView 组件,当用户单击“Yahoo”按钮时,它应该显示来自 https://us.yahoo.com 的内容,而当应用程序 运行 作为独立的应用程序,但当我从命令行 运行 jar 文件时它可以工作。我需要向 jpackage 添加任何东西吗?
如果需要源代码和 FXML 文件,请告诉我。
谢谢

你见过吗?尝试下载 Gluon jmods 并使用它代替 %JAVAFX_HOME%

您原来的问题与缺少本机代码有关。但是您似乎已经通过使用 Gluon 提供的 JavaFX 的 JMOD 文件解决了这个问题。因此,一旦您创建了一个独立的应用程序,我将尝试帮助您解决有关 https://us.yahoo.com 未加载到 WebView 中的其他问题。

当我尝试自己加载该网站时,我 运行 遇到了与您相同的问题。尽管有时我会收到“我们正在解决问题”的页面响应,但有时整个应用程序会变得无响应,而其他时候什么也不会发生(加载似乎只是“优雅地”失败)。这也发生在其他网站上,而不仅仅是雅虎。经过一些测试,我终于能够得到以下错误:

java.lang.Throwable: SSL handshake failed
        at javafx.web/javafx.scene.web.WebEngine$LoadWorker.describeError(Unknown Source)
        at javafx.web/javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(Unknown Source)
        at javafx.web/javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(Unknown Source)
        at javafx.web/com.sun.webkit.WebPage.fireLoadEvent(Unknown Source)
        at javafx.web/com.sun.webkit.WebPage.fwkFireLoadEvent(Unknown Source)
        at javafx.web/com.sun.webkit.network.URLLoaderBase.twkDidFail(Native Method)
        at javafx.web/com.sun.webkit.network.HTTP2Loader.notifyDidFail(Unknown Source)
        at javafx.web/com.sun.webkit.network.HTTP2Loader.lambda$didFail(Unknown Source)
        at javafx.web/com.sun.webkit.network.HTTP2Loader.lambda$callBackIfNotCanceled(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)

这表明 jpackage 创建的应用程序缺少一些加密库。从这里我只是猜测,但包括:

--add-modules jdk.crypto.cryptoki,jdk.crypto.ec

当运行jpackage好像解决了问题。我不知道是否需要两个模块,或者是否只需要一个(或者如果添加其中一个模块会隐式添加另一个模块)。


旁注:滚动浏览 https://us.yahoo.com 时,我经常会收到以下警告:

Mar 05, 2021 12:10:40 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl onError
WARNING: onError, errCode=0, msg=Could not create player!

并且:

Mar 05, 2021 12:10:41 PM com.sun.javafx.webkit.prism.WCMediaPlayerImpl$CreateThread run
WARNING: CreateThread ERROR: java.lang.UnsupportedOperationException: Unsupported protocol "data"

无论应用程序是如何打包的,我都会收到该警告。我不知道如何解决这个问题,或者是否有不修改JavaFX代码本身的解决方案。