当似乎只有一个 Java 版本可用时,为什么会出现 LinkageError?

这是我的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

那么不同版本的编译和执行是如何完成的呢?


白衣非少年
浏览 1011回答 3
3回答

慕森王

问题是可以通过我的 PATH 变量访问其他下载的 Java 版本。因此,在编译和执行我的程序时指定 javac 和 java 可执行文件的完整路径后,它就可以工作了。

Smart猫小萌

与 sudo 命令一起使用更新替代方案 --config javac 和 java。因此,您可以为编译器和运行时环境选择相同版本的 java。编译我的java程序后我也遇到了同样的错误。我有截图---->

萧十郎

当您尝试更改 java .class 文件的内容时,也会发生此错误。字节码验证程序会生成此错误,例如。错误:加载主类 Hello 时发生 LinkageError java.lang.UnsupportedClassVersionError:Hello 已由更新版本的 Java Runtime(类文件版本 8251.8224)编译,此版本的 Java Runtime 仅识别最高 59.0 的类文件版本
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java