无法启动用jpackage创建的程序

问题描述 投票:0回答:1

大家好,我是 jpackage 的新手,我正在使用 JavaFx 框架构建一个 java 应用程序,并且添加了一个 Websocket 服务器(使用 org.eclipse.jetty.websocket 和 org.eclipse.jetty 依赖项),但是当我加倍时应用程序不会启动单击 .exe。 我在 pom 文件中使用以下依赖项来添加 websocket 服务器:

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>11.0.15</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>11.0.15</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-jetty-api</artifactId>
            <version>11.0.15</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-jetty-server</artifactId>
            <version>11.0.15</version>
        </dependency>

该应用程序是在 IntelliJ 中使用 java 20 制作的,当我调试时工作正常,我可以与图形界面交互,并且我可以连接到 websocket 服务器,但是当我使用以下命令创建应用程序映像(.exe)时:

jlink --verbose --output runtime --module-path "$Env:JAVA_HOME/jmods" --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web,java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr --strip-native-commands --no-header-files --no-man-pages --strip-debug --compress=1
jpackage --verbose --type app-image --runtime-image runtime --input ../../target/libs --module-path ../../target/mods --module $ModuleAndMainClass --dest . --name $AppName --vendor $Vendor --resource-dir resources --java-options "-XshowSettings:all" --icon resources/$AppName.ico

我成功获得了 .exe 应用程序,但是当我双击 .exe 时,该进程打开但立即结束,没有警告或错误,并且当我创建不带 websocket 且不带 org.eclipse.jetty、org.eclipse.websocket 的 .exe 时依赖项,.exe 成功运行,我可以与 Javafx 创建的图形界面进行交互。

我正在使用 Jdk 20.0.2 和 javafx Framework 20.0.2,并且我已在路径 %JAVA_HOME%/jmods 中安装了 Javafx jmod,并且我尝试了以下操作:

  1. 我尝试从库安装 JavaxFx 20.0.2 框架,将 .jar 文件复制到 %JAVA_HOME%\lib 文件夹
  2. 我尝试清除缓存
  3. 我尝试重新安装 Java 和 JavaFx 20.0.2
  4. 我尝试在执行 Jpackage 和 Jlink 命令时禁用防病毒软件
  5. 我尝试清除maeven包存储库。
  6. 我已经验证我只安装了单个版本的 Java(20.0.2) 7.我已经验证了包(jmod)已添加到.exe所在的目标文件夹中,我什至手动复制了它们,但问题仍然存在。
  7. 我尝试手动下载 javafx jmod 包以将文件夹路径包含在 jLink 命令的 --module-path 参数中。

我的系统环境看起来不错:JAVA_HOME是我的jdk 20安装文件夹的路径,Path中有%JAVA_HOME% 之后问题仍然存在,我有以下问题:

  1. 我必须在 jlink 或 jpackage 中包含什么,以便我可以创建应用程序映像并使用 javafx 和 websocket 服务器(org.eclipse.jetty)运行它?
  2. 如果应用程序自动关闭,如何验证应用程序启动时的日志?, Java 有办法监视使用 jpackage 创建的 .exe 的执行情况吗?
  3. 如何验证应用程序映像中包含的运行时是否可以加载应用程序启动所需的所有包? 任何想法将不胜感激。 最好
java javafx jetty jlink jpackage
1个回答
0
投票

如果应用程序自动关闭,如何验证应用程序启动时的日志?, Java 有办法监视使用 jpackage 创建的 .exe 的执行情况吗?

您可以尝试使用

--win-console
运行 jpackage,然后从控制台运行应用程序以查看是否打印任何错误消息。

如何验证应用程序映像中包含的运行时是否可以加载应用程序启动所需的所有必要包?

创建不带

--strip-native-commands
选项的运行时映像。这将生成一个包含
java
启动器的运行时映像。然后,您可以使用该启动器通过手动指定模块路径和主模块来尝试手动启动应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.