微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaFX部署:无法启动JVM

如何解决JavaFX部署:无法启动JVM

问候

我已经使用由jpackage创建的msi安装程序部署了一个简单的JavaFX应用程序。双击Windows 10“程序文件”目录中安装的应用程序图标时,它显示错误“无法启动JVM”。在部署之前,我从命令提示符下测试了应用程序jar文件,没有任何问题。当检查应用程序安装目录(在“ C:\ Program files”下)时,它具有所有的运行时dll等,因此我不确定是什么原因导致此错误?这是我用来构建运行时映像的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运行时映像安装了应用程序,这无疑解决了“无法启动JVM”问题。该应用程序已启动,但是,我有一个WebView组件,当用户单击“ Yahoo”按钮时,该WebView组件应显示https://us.yahoo.com中的内容,并且当该应用程序作为独立应用程序运行时,这似乎不起作用但是当我从命令行运行jar文件时,它可以工作。我需要在jpackage中添加任何内容吗?
请让我知道是否需要源代码和FXML文件
谢谢

解决方法

您看过running JavaFX application after jpackage吗?尝试下载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$18(Unknown Source)
        at javafx.web/com.sun.webkit.network.HTTP2Loader.lambda$callBackIfNotCanceled$10(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(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$3(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代码本身的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。