在Scene Builder中打开自定义控件时遇UnsupportedClassVersionError问题
解决Scene Builder中UnsupportedClassVersionError的问题
这个问题我之前帮不少开发者排查过,本质就是Java版本不兼容导致的:你的自定义IntegerField类是用Java 9(对应类文件版本53.0)编译的,但当前Scene Builder依赖的JRE是Java 8(最高只能识别到类文件版本52.0),所以它没法读取高版本编译出来的类文件。
给你两个靠谱的解决方案,选哪个看你的项目需求:
方案1:把自定义类的编译版本降到Java 8
这是最稳妥的方案,毕竟很多JavaFX项目还在兼容Java 8:
- 如果你用IntelliJ IDEA:
- 打开
File > Project Structure > Project,把「Project SDK」改成Java 8,「Project language level」选「8 - Lambdas, type annotations etc.」 - 切换到「Modules > Sources」标签,把每个模块的「Language level」也改成8
- 重新编译你的
IntegerField类,再导入到Scene Builder里
- 打开
- 用Maven的话,在pom.xml里添加或修改这段配置:
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> - 用Gradle的话,在build.gradle里设置:
sourceCompatibility = 1.8 targetCompatibility = 1.8
方案2:升级Scene Builder的JRE到Java 9+
如果你的项目本身就是基于Java 9+开发的,那可以直接升级Scene Builder的运行环境:
- 若是IntelliJ集成的Scene Builder:打开
File > Settings > Languages & Frameworks > JavaFX > Scene Builder,在「Scene Builder executable」下方的「JRE」选项里,指定一个Java 9及以上版本的JRE路径 - 若是独立版Scene Builder:找到安装目录下的
jre文件夹,替换成Java 9+的JRE即可(注意要对应操作系统位数)
额外排查小技巧
- 可以在终端里执行
javap -v IntegerField.class,查看输出里的「major version」字段,确认类文件版本是不是53.0(对应Java 9) - 检查IntelliJ的项目SDK和模块SDK是否一致,有时候模块单独用了更高版本的JDK,会导致编译出高版本类文件
内容的提问来源于stack exchange,提问作者xZyph
相关产品推荐
相关产品推荐

