1

问候

我使用由 jpackage 创建的 msi 安装程序部署了一个简单的 JavaFX 应用程序。双击安装在 Windows 10“程序文件”目录中的应用程序图标时,会显示错误“无法启动 JVM”。在部署之前,我从命令提示符处测试了应用程序 jar 文件,没有任何问题。检查应用程序安装目录时(在“C:\Program 文件”下)它有所有运行时 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 组件,当用户单击“雅虎”按钮时,它应该显示来自https://us.yahoo.com的内容,而当应用程序作为独立的应用程序,但是当我从命令行运行 jar 文件时它可以工作。我需要向 jpackage 添加任何内容吗?
如果需要源代码和 FXML 文件,请告诉我。
谢谢

4

2 回答 2

1

您最初的问题与缺少本机代码有关。但是您似乎已经通过使用 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 代码本身的解决方案。

于 2021-03-05T19:06:18.110 回答
0

你见过在 jpackage 之后运行 JavaFX 应用程序吗?尝试下载 Gluon jmods 并使用它而不是 %JAVAFX_HOME%

于 2020-09-18T03:44:30.930 回答