当似乎只有一个版本的 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

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

原文由 Chris Anderson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 780
2 个回答

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

原文由 Chris Anderson 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在 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. 选择属性
  3. 选择 Java 编译器
  4. 单击恢复默认值。
  5. 应用并关闭。

这对我有用。 在此处输入图像描述

原文由 vinay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题