java - 如何修复"Unsupported major.minor version 51.0 error"?

  显示原文与译文双语对照的内容

我正试图使用 NotePad++ 作为all-in-one工具编辑,运行,编译等。

我已经安装了 JRE,我将路径变量设置到。。/bin目录。

在 NotePad++,等我把这当我划 message.


java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClassCond(Unknown Source)
. . .......................................

我认为问题是关于版本;某些版本的Java可能是旧的或者太新的。

  1. 如何修复它?
  2. 应该安装 JDK,并将我的路径变量设置为JDK而不是 JRE?
  3. 在JRE或者JDK中的PATH 变量有什么区别?
时间:

所显示的版本号描述了类文件与之兼容的JRE版本。

报告的主要数字是:


J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

( 源:http://en.wikipedia.org/wiki/Java_class_file )

要解决实际问题,你应该尝试使用更新版本的Java JRE运行Java代码,或者指定目标参数,以指示编译器创建与早期Java版本兼容的代码。

例如为了生成与 Java 1.4兼容的类文件,使用以下 命令行:


javac -target 1.4 HelloWorld.java

使用新版本的Java编译器,你可能会得到关于 Bootstrap 类路径未被设置的警告。 有关这里错误的更多信息,请参见博客日志 新的javac警告,用于设置一个不含 bootclasspath的旧版本。

这里错误意味着你试图加载的Java"类"文件是用较新版本的Java编译的,而不是安装的。

例如你的.class 文件可能已经编译为 JDK 7,你正在尝试用 JDK 6运行它。

解决方案是:

  • 升级你的Java运行时或者
  • 如果有源代码,请使用本地Java编译器( 如果你有一个) 重新编译该类。

    javac FileName.java

对于开发人员来说,如果另一个开发人员在. class 文件中检查,并且他们得到的java版本比你拥有的更高 !

你正试图用一个不支持代码编译版本的Java版本运行你的程序。 因此,你必须使用较高版本编译代码,并使用较低版本运行它。

当你正在获取


Unsupported major.minor version 51.0

使用较低version,和版本 51.0 对应于 J2SE 7 你最有可能编译了该代码采用 Java 7然后尝试运行上面, 检查 java -version 显示的内容。它应该是 Java 7版本。 如果不在路径/java_home中进行适当的更改。 或者你可以使用你试图运行代码的相同版本进行编译。 如果配置混乱,你总是可以给出绝对路径 /home/user/jdk1.7.0_11/bin/javac/home/user/jdk1.7.0_11/bin/java

在使用 Ant 脚本构建应用程序时遇到同样的问题。

我在应用程序开发中使用了 Eclipse,并且在项目的构建属性中更改了编译器版本。 但这对我不起作用。 然后我发现我可以在 Ant 脚本中提供编译器版本。

我在它编译Java文件的部分修改了 Ant 脚本。


<target name="build-java" depends="prepare-build">
 <echo message="Compiling java files"/>
 <javac.. ..
 target="1.5"...
 </javac>
</target>

这对我解决了不支持的主要次要问题。

...