使用Launch4J将JAR转EXE运行时出现JNI错误与UnsupportedClassVersionError
报错核心原因
从日志可以定位到问题根因是
UnsupportedClassVersionError:你用于编译JAR包的JDK版本为Java 16(对应类文件版本60.0),但Launch4J生成的EXE运行时调用的JRE版本最高只支持Java 8(对应类文件版本52.0),低版本Java运行环境无法兼容高版本编译的类文件,才会触发JNI错误。
解决方案
- 方案1:降低JAR的编译版本匹配运行环境
如果你需要兼容Java 8环境,直接在编译JAR的IDE或构建工具中设置编译目标版本为1.8即可:- Maven项目在pom.xml中添加配置:
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>- Gradle项目在build.gradle中添加配置:
配置完成后重新打包生成JAR,再用Launch4J封装即可。compileJava { sourceCompatibility = '1.8' targetCompatibility = '1.8' } - 方案2:调整Launch4J的JRE配置要求
如果你不想修改编译参数,可直接在Launch4J的「JRE」设置页调整配置:- 将「Min JRE version」参数设置为
1.16.0,要求运行环境至少为Java 16版本 - 如果需要做免安装的EXE,可在「Bundle JRE path」中填入本地Java 16+的JRE文件夹路径,Launch4J会将JRE和程序一起打包,用户不需要额外安装Java环境就能直接运行。
- 将「Min JRE version」参数设置为
- 方案3:升级运行设备的Java版本
仅在你自己本地测试运行报错时可用,直接安装Java 16或更高版本的JRE,配置好系统环境变量后,EXE会自动调用匹配的高版本JRE运行程序。
内容的提问来源于stack exchange,提问作者LBbrowns
相关产品推荐
相关产品推荐

