这是我的Java环境:
~: java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
但是在尝试在编译后执行程序时,出现以下错误:
Error: LinkageError occurred while loading main class ClassName
java.lang.UnsupportedClassVersionError: ClassName has been
compiled by a more recent version of the Java Runtime
(class file version 55.0), this version of the Java Runtime
only recognizes class file versions up to 54.0
我的PATH和JAVA_HOME变量都指向此版本的Java。一世 下载了其他版本,但似乎未在系统中注册:
update-alternatives --display java
java - auto mode
link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1101
slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
那么如何在不同版本中完成编译和执行?
答案 0 :(得分:1)
问题是可以通过我的PATH变量访问其他Java下载版本。因此,在编译和执行程序时指定javac和java可执行文件的完整路径后,它就可以工作。
答案 1 :(得分:1)
与 sudo 命令一起用于更新替代方案 --config javac 和 java。因此,您可以为编译器和运行时环境选择相同版本的java。
答案 2 :(得分:0)
当您尝试更改java .class文件的内容时,也会发生此错误。 字节码验证程序会产生此错误 例如。
错误:加载主类Hello时发生LinkageError java.lang.UnsupportedClassVersionError:您好是Java运行时的较新版本(类文件版本8251.8224)编译的,此版本的Java Runtime仅可识别59.0以下的类文件版本。