我正在尝试使用Notepad++作为我的多功能工具编辑、运行、编译等。

我安装了JRE,并将路径变量设置为/bin目录。

当我在Notepad++中运行“Hello world”时,我收到以下消息:

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的某些版本可能是旧的或太新的。

如何修复?我应该安装JDK,并将路径变量设置为JDK而不是JRE吗?JRE或JDK中的PATH变量有什么区别?


当前回答

您已经用JDK7编译了Java类,并且正在尝试在JDK6上运行相同的类。

其他回答

我在1.7中编写的项目中遇到了同样的问题,并尝试在1.6中执行。

我在Eclipse中的解决方案:

右键单击项目财产->Java构建路径->库选择JRE系统库,然后单击右侧的编辑,然后选择目标JRE。现在转到左侧的“Java编译器”,将“编译器”符合性级别更改为目标。

这对我有用。

此错误表示您正在尝试加载一个Java“类”文件,该文件是用比您安装的Java版本更高的版本编译的。

例如,您的.class文件可能是为JDK7编译的,您正在尝试使用JDK6运行它。

因此,解决方案是:

升级Java运行时或如果有源代码,请使用本地Java编译器(如果有)重新编译类。javac文件名.java

对于开发人员来说,如果另一个开发人员签入了.class文件,并且他们得到了比您更新的java版本,则可能会发生这种情况!

基于此。。。

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

在Eclipse中,右键单击包资源管理器中的项目:

生成路径->配置生成路径

低于:

Java构建路径->库->添加库->JRE系统库->安装的JRE->搜索。

搜索完成后,通过在可用列表中选择库来添加所需的JRE。

我遇到的问题是,为了运行单元测试,必须从命令行对项目运行Maven编译;如果我对测试类进行了更改,并让Eclipse自动重新编译它,那么就会出现“不支持的major.minor版本51.0”错误。

我确实安装了JDK6和JDK7,但在pom和Eclipse的项目财产页面中,我的所有JRE设置都指向1.6。再多的Maven Update Project和/或刷新也解决不了这个问题。

最后,我尝试关闭项目并重新打开它,这似乎解决了问题!高温

正如一些人在其他地方回答的那样,Java程序运行在比编译它的Java版本更旧的Java版本上。它需要“交叉编译”以实现向后兼容性。换句话说,源和目标Java版本不匹配。

更改Eclipse菜单中的选项并不能回答最初的发帖人所说的他/她没有使用Eclipse。在OpenJDK javac 1.7版上,如果使用参数-source和-target,并在编译时提供目标版本(即旧版本)的rt.jar文件,则可以为1.6进行交叉编译。如果您实际安装了1.6 JRE,可以指向它的安装(例如,Ubuntu上的/usr/lib/jvm/java-6-openjdk-i386/JRE/lib/rt.jar,SunOS上的/usr/jdk/jdk1.6.0_60/JRE/lib.rt.jar。抱歉,我不知道它在Windows系统上的位置)。像这样:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

看起来你可以从互联网上下载rt.jar并指向它。不过这并不太优雅:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java