使用Scalafx遇UnsupportedClassVersionError,Java8环境下如何解决?
项目依赖配置如下:
ThisBuild / scalaVersion := "2.12.1" libraryDependencies += "com.google.code.findbugs" % "jsr305" % "3.0.2" libraryDependencies += "org.scalafx" %% "scalafx" % "22.0.0-R33"
运行时抛出异常:
java.lang.UnsupportedClassVersionError: javafx/application/ColorScheme has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
当前项目使用Java 8(对应class文件主版本52.0),已在IntelliJ IDEA的项目结构中配置jdks\corretto-1.8.0_412,且设置了对应的JAVA_HOME,但问题仍未解决。
解决方案
匹配兼容的ScalaFX版本:你用的ScalaFX 22.0.0-R33是基于Java 17编译的(class版本61.0对应Java 17),完全不兼容Java 8。Java 8需要搭配ScalaFX 8.x系列版本,比如
8.0.192-R14,这个版本适配Java 8和Scala 2.12.x,修改依赖为:libraryDependencies += "org.scalafx" %% "scalafx" % "8.0.192-R14"强制sbt使用Java 8:即使IDEA全局配置了Java 8,sbt可能默认调用系统其他版本JVM。可以在项目根目录创建
.jvmopts文件,写入:-Djava.home=你的corretto-1.8.0_412路径或者在
build.sbt里添加:javaHome := Some(file("jdks/corretto-1.8.0_412"))检查IDEA的sbt运行配置:打开Run/Debug Configurations,找到你执行的sbt任务(比如run),在Configuration标签页的JRE选项里,确认选择的是corretto-1.8.0_412,而非默认的系统JVM。
清理依赖缓存:sbt可能缓存了高版本的JavaFX相关依赖,执行
sbt clean reload update,或者直接删除项目下的target目录和本地缓存目录(比如~/.ivy2/cache/org.scalafx),重新拉取兼容版本的依赖。
内容的提问来源于stack exchange,提问作者Jelly

