大家好,我是 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,并且我尝试了以下操作:
我的系统环境看起来不错:JAVA_HOME是我的jdk 20安装文件夹的路径,Path中有%JAVA_HOME% 之后问题仍然存在,我有以下问题:
如果应用程序自动关闭,如何验证应用程序启动时的日志?, Java 有办法监视使用 jpackage 创建的 .exe 的执行情况吗?
您可以尝试使用
--win-console
运行 jpackage,然后从控制台运行应用程序以查看是否打印任何错误消息。
如何验证应用程序映像中包含的运行时是否可以加载应用程序启动所需的所有必要包?
创建不带
--strip-native-commands
选项的运行时映像。这将生成一个包含 java
启动器的运行时映像。然后,您可以使用该启动器通过手动指定模块路径和主模块来尝试手动启动应用程序。