You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX应用JAR转EXE(Launch4j)后出现JNI错误求助

解决Launch4j打包EXE后的JNI错误与UnsupportedClassVersionError问题

嘿,这个问题我之前踩过坑!从你给出的日志里的java.lang.UnsupportedClassVersionError就能揪出核心原因——你的Main类是用更高版本的JDK编译的,但Launch4j打包时指定的JRE版本却更低,导致JVM没法识别这个类的版本,直接触发了JNI错误和后续的异常弹窗。

下面是具体的解决步骤:

  • 第一步:确认版本匹配情况
    先搞清楚你编译项目用的JDK版本,以及Launch4j配置的JRE版本:

    • 检查编译版本:打开命令行,进入项目的class文件目录,执行命令 javap -verbose Main | grep "major",返回的数字对应JDK版本(比如52=JDK8,55=JDK11,61=JDK17)
    • 检查Launch4j配置:打开你的Launch4j配置(不管是GUI界面还是.l4j.ini文件),找到「JRE」设置项,查看「Minimum version」和「Maximum version」的数值,是不是比刚才查到的编译版本号低
  • 第二步:调整Launch4j的JRE配置
    这是最直接的解决办法:

    • 把「Minimum version」改成和你编译用的JDK版本一致(比如你用JDK17编译,就填17),或者设置一个不低于编译版本的数值
    • 如果担心用户机器上没有对应版本的JRE,可以勾选「Bundle JRE」选项,指定本地JRE的路径,让EXE自带JRE环境,彻底避免版本不兼容问题
  • 第三步:降级编译版本(可选)
    要是你不想要求用户安装高版本JRE,也可以用更低版本的JDK重新编译项目:

    • 在IDE里调整项目的编译配置(比如IDEA里进入「Project Structure」,把「Project SDK」和「Language Level」改成目标JRE对应的版本)
    • 重新打包JAR,再用Launch4j生成EXE

补充一下:你看到的两个弹窗其实是连锁反应——JNI错误是因为JVM加载类时发现版本不兼容,没法正常处理类文件,紧接着就抛出了UnsupportedClassVersionError这个异常,也就是第二个弹窗提示的内容。

内容的提问来源于stack exchange,提问作者Zain Ul Abidin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:19:31