即使java -version和javac -version相同,也会出现java.lang.UnsupportedClassVersionError

时间:2019-06-16 08:30:51

标签: java eclipse rmi ubuntu-18.04 openjdk-11

在我的大学里,我们正在学习有关编写RMI应用程序的知识。当我首次尝试在Eclipse 2019-03中运行示例应用程序时,我遇到了以下错误: java.lang.UnsupportedClassVersionError 我成功运行了其他项目(非RMI),没有任何问题。

我跑步时

java -version

我得到:

openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu218.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu218.04.1, mixed       mode, sharing)

javac -version

我得到:

javac 11.0.3

我在运行Ubuntu 18.04的系统上安装了Java 8和11。 在寻找问题的解决方案时,我发现了以下问题: How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version

将Eclipse中的编译器兼容级别的设置更改为1.8确实可以,并且更改项目特定的设置对我有帮助,我最终可以运行应用程序而没有任何错误。不过,这种解决方案并不令我满意。

我跑步时

update-alternatives --config java

update-alternatives --config javac

在两种情况下都选择了openjdk11。 我不明白,如果不更改编译器设置,为什么会出现错误。

答案之一表明这是$ JAVA_HOME变量设置错误。当我跑步时:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

这确实给了我答案

/usr/lib/jvm/java-8-openjdk-amd64/jre

我尝试按照本指南将其更改为openjdk11: https://askubuntu.com/questions/175514/how-to-set-java-home-for-java 当我现在跑步

echo $JAVA_HOME

我得到:

/usr/lib/jvm/java-11-openjdk-amd64

但是当我跑步

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

答案还是一样。

我希望能够使用openjdk 11来编译和运行代码,而无需在Eclipse中更改编译器设置。有人遇到同样的问题,给我小费吗? 预先谢谢你!

完整错误如下:

java.lang.UnsupportedClassVersionError: chapter6/Counter 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 52.0

1 个答案:

答案 0 :(得分:1)

在Eclipse中运行时,/ etc / alternatives被忽略。相反,您对要使用的JDK / JRE有一个单独的定义。可以在Eclipse首选项中全局设置,在“项目属性”中甚至在调试/运行配置中一对一设置(以便在多个Java版本中测试您的应用程序)。