当似乎只有一个版本的 Java 可用时,为什么我会收到 LinkageError?

Why do I get LinkageError when only one version of Java seems to be available?

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

那么为什么编译和执行是不同版本的呢?

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

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

错误:加载main时发生LinkageError class你好 java.lang.UnsupportedClassVersionError: Hello 已经被较新版本的Java Runtime编译(class文件版本8251.8224),这个版本的Java Runtime只识别class 文件版本高达 59.0

update-alternatives --config javacupdate-alternatives --config java 的 sudo 命令一起使用。所以,编译器和运行环境可以选择相同版本的java。

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

我在 eclipse 中遇到这个错误:

LinkageError occurred while loading main class com.example.demo.SpringDemo1Application
    java.lang.UnsupportedClassVersionError: com/example/demo/SpringDemo1Application 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 60.0
  1. 右键单击项目名称
  2. Select 属性
  3. select Java 编译器
  4. 单击恢复默认值。
  5. 申请并关闭。

这对我有用。 enter image description here