从Jar依赖启动JavaFX应用遇javaw.exe退出码1问题求助
问题分析与解决方案
首先,你的启动命令确实存在几个容易导致启动失败的问题,而且javaw.exe的选择也会阻碍你排查错误,我来逐一拆解:
1. 优先替换javaw.exe为java.exe
javaw.exe是无控制台窗口的启动方式,一旦启动失败(比如类找不到、配置文件缺失),你看不到任何错误日志,只能拿到退出码1,根本没法定位问题。先换成java.exe启动,这样控制台会输出详细的错误信息,比如ClassNotFoundException或者配置文件加载失败的提示,这是排查的关键。
2. 类路径(classpath)配置错误
你的命令里用了-classpath ./*,但你的目标Jar和依赖都在buildfolder + "\\dir\\dependency"目录下,当前工作目录是buildfolder,所以./*只会扫描buildfolder下的Jar,完全找不到你需要的依赖Jar,这会直接导致JVM找不到主类au.com.nab.fx.nova.app.NovaUIDriver,从而退出码1。
修正后的类路径应该指向依赖目录:
"-classpath " + buildfolder + "\\dir\\dependency\\*"
或者相对路径写法(因为工作目录是buildfolder):
"-classpath .\\dir\\dependency\\*"
3. 命令参数的冗余空格
你部分参数后面带了多余的空格,比如"-Xms512m "、"-Xmx2024m ",虽然大部分情况下JVM会忽略,但有可能导致参数解析异常,建议去掉这些多余空格,保持参数的紧凑性。另外注意-Xmx2024m应该是-Xmx2048m(2G的标准写法),不过这不是致命问题,但规范些更好。
修正后的命令示例
String buildfolder = System.getProperty("user.dir"); String javahome = envmap.get("JAVA_HOME") + "\\jre"; // 换成java.exe以便查看错误日志 process = driver.getApplications().run( javahome + "\\bin\\java.exe", "-Xms512m" + " -Xmx2048m" + " -XX:+UseConcMarkSweepGC" + " -XX:+CMSIncrementalMode" + " -verbose:gc" + " -classpath " + buildfolder + "\\dir\\dependency\\*" + " -Dspring.profiles.active=stub" + " -Dspring.config.location=classpath:conf/app.yaml" + " -XX:+UnlockCommercialFeatures" + " -XX:+FlightRecorder" + " -Dlog4j.configurationFile=log4j2.yaml" + " au.com.nab.fx.nova.app.NovaUIDriver", buildfolder // 工作目录保持为buildfolder即可 );
额外排查点
当用java.exe启动后,如果还是报错,重点看:
- 主类
au.com.nab.fx.nova.app.NovaUIDriver是否存在于依赖目录的某个Jar中 app.yaml是否确实在Jar的classpath:conf/路径下,如果是外部文件,需要改为绝对路径,比如file:///" + buildfolder + "/conf/app.yaml- JavaFX相关的依赖是否都包含在
dependency目录下(JDK8的JavaFX需要单独的Jar包支持)
内容的提问来源于stack exchange,提问作者SSF
相关产品推荐
相关产品推荐

