如何修复此错误:类文件有错误的版本52.0,应为49.0

时间:2015-05-06 13:52:38

标签: java macos

我真的很挣扎。我一直无法配置Intellij使用Javac,无法运行javadoc。我似乎无法让我的Java运行时环境稳定并在Mac OSX上高效工作。

我已经创建了最基本的示例,这是一个hello world程序,它仍然是来自命令行的错误。我读到的关于这个错误的一切都告诉我“升级编译器”。但我真的不确定问题是什么,javac& java都运行1.8(现在,我尝试升级系统JVM后)。

我在调用javac时明确设置了路径,检查了版本等。一切都告诉我它是1.8。

任何人都可以解释如何解决这个问题吗? (不将我的系统恢复为1.5 SDK)。

这是基本的hello world应用程序的输出:

$JAVA_HOME/bin/javac Main.java
Main.java:3: cannot access java.lang.Object
bad class file: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class)
class file has wrong version 52.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public class Main {
       ^
1 error
localhost:mycompany$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
localhost:mycompany$

javac版本的输出:

javac -version
javac 1.8.0_45
javac: no source files
Usage: javac <options> <source files>

java版本的输出:

java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

2 个答案:

答案 0 :(得分:4)

错误消息表示您尝试使用Java 5 VM加载Java 8类。

由于未知原因,$JAVA_HOME/bin/javac正在使用JDK 8 Java运行时(.../rt.jar),但编译器本身加载了Java 5 VM。

我的下一步是确保$JAVA_HOME/bin/javac实际上应该是什么(而不是一个做奇怪事情的脚本)。我还会检查环境(CLASSPATH)和-Xbootclasspath等选项。尝试set | grep -i javaset | grep -i path查找可疑变量。

如果似乎没有任何效果,请尝试重新安装Java 8 SDK。

答案 1 :(得分:2)

在尝试使用ant构建Arduino IDE时,我遇到了完全相同版本的问题。解决方法是从/Library/Java/Extensions/中删除旧版本的 tools.jar - 只是想澄清其他遇到同样问题的人。