我正在尝试使用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变量有什么区别?


当前回答

问题的答案是:

线程“main”java.lang.UnsupportdClassVersionError:edu/stvens/cs549/dhts/main/LocalContext:不支持的major.minor版本52.0

我也有同样的问题。对于那些在AWS ec2实例中遇到这种问题的人,他们不知怎么被重定向到了这个问题。我正在回答这些问题,并想分享我是如何做到的。我遇到了麻烦,因为AmazonEC2实例运行的是java 1.7版,可能我的项目与它不兼容,因为我使用的是Maven,它是为java 1.8预先配置的。所以我安装了新版本的java:

sudo yum-y安装java-1.8.0

然后,重要的一步是删除旧版本:

sudo yum remove java-1.7.0-openjdk

记得在安装新版本后删除它,否则它将继续使用相同的旧版本,我希望它能解决您的问题,我的情况就是这样。

其他回答

当从Eclipse运行Ant时,我收到了同样的错误消息,但这里提到的其他解决方案并没有解决我的问题。有趣的是,从Windows命令行运行Ant运行得很好,所以这必须是Eclipse中的配置问题。

事实证明,在Eclipse下,您可以指定Ant应该运行的环境,并将其设置为JRE而不是JDK。

转到:运行->外部工具->外部工具配置。。。为项目选择Ant build.xml(如果有多个项目)激活选项卡“JRE”这里选择了“单独的JRE:jre6”。当我将其从1.6或1.7系列更改为JDK时,错误消失了。

您试图使用不支持编译代码的Java版本运行程序。所以基本上,您必须使用更高版本编译代码,并尝试使用更低版本运行代码。

正如你所得到的

Unsupported major.minor version 51.0

版本51.0对应于J2SE 7,您很可能用Java 7编译了代码,并尝试使用较低版本运行它。检查java版本显示的内容。它应该是Java 7版本。如果没有,请在PATH/JAVA_HOME中进行适当的更改。或者您可以使用试图运行代码的相同版本进行编译。如果配置令人困惑,您可以始终给出绝对路径/home/user/jdk1.7.0_11/bin/javac和/home/user/jdk1.70_11/bin/java。

如果有人在使用Gradle,请将其放入build.Gradle

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

在上述情况下,我们告诉编译器使字节码与版本java7(我希望在其中运行类的java版本)兼容。

如何修复?

此错误表示用于执行类代码的JRE无法识别所使用的Java版本。通常是因为生成类文件(即编译的)的Java版本较新。

要修复它,您可以

a) 使用与运行Java编译器相同或更旧版本的Java编译器编译Java源代码,即安装适当的JDK。

b) 使用较新版本的Java编译器编译Java源代码,但要处于兼容模式。即使用-target参数。

c) 在与用于编译类的JDK版本相同或更新的JRE中运行编译的类。

您可以使用检查当前使用的版本编译器为javac-version,运行时为java-version。

我应该安装JDK,并将PATH变量设置为JDK吗而不是JRE?

当然,为了进行编译,请安装并配置所需的特定JDK。

对于运行时,您可以使用JDK或独立JRE附带的版本,但无论如何,请确保安装了正确的版本,并且已配置了PATH,这样就不会出现意外。

JRE或JDK中的PATH变量有什么区别?

PATH环境变量告诉命令shell在哪里查找您键入的命令。当您键入java时,命令shell解释器将从左到右查看PATH变量中指定的所有位置,以找到要运行的适当的java运行时可执行文件。如果您安装了多个版本的Java,即在PATH变量中指定的多个位置安装了Java可执行文件,那么从左到右时遇到的第一个将是执行的那个。

编译器命令是javac,仅随JDK提供。运行时命令是java,随JDK一起提供,位于JRE中。

很可能您安装了一个版本(51.0=Java 7)的javac,也安装了相同版本的Java,但PATH中较早出现了另一个先前版本的Java,因此调用的不是您期望的版本。

在Eclipse的菜单窗口->首选项->Java->编译器中,还选中“配置项目特定设置”。

如果您仍然存在相同Java版本的错误:请尝试手动删除项目的构建文件夹。然后重新启动Eclipse。