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

时间:2018-10-31 19:22:18

标签: java java-home 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

那么如何在不同版本中完成编译和执行?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

与 sudo 命令一起用于更新替代方案 --config javac 和 java。因此,您可以为编译器和运行时环境选择相同版本的java。

我在编译我的 java 程序后也遇到了同样的错误。 我有截图----> SCREENSHOT

答案 2 :(得分:0)

当您尝试更改java .class文件的内容时,也会发生此错误。 字节码验证程序会产生此错误 例如。

错误:加载主类Hello时发生LinkageError java.lang.UnsupportedClassVersionError:您好是Java运行时的较新版本(类文件版本8251.8224)编译的,此版本的Java Runtime仅可识别59.0以下的类文件版本。