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


当前回答

如果使用ant,可以在build.xml文件中指定编译器的“目标”,如下所示:

 <target name="compile" depends="init">
    <javac executable="${JAVA_HOME}\bin\javac" srcdir="${src.dir}" target="1.6" destdir="${classes.dir}" debug="true"
        deprecation="true" classpathref="compile.classpath" encoding="utf8">
        <include name="**/*.java" />
    </javac>
</target>

其他回答

如何修复?

此错误表示用于执行类代码的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,因此调用的不是您期望的版本。

我什么都试过了。重新安装Tomcat终于奏效了。以下是我在重新安装之前检查的内容。

确保你的环境变量看起来像这样。

$ echo $JAVA_HOME
C:\Program Files\Java\jdk1.7.0_51\
$ echo $JRE_HOME
C:\Program Files\Java\jdk1.7.0_51\jre\bin

确保Eclipse正在使用与您设置JAVA_HOME相同的jre(如果未设置JAVA_HHOME,则将查看jre_HOME)。窗口>首选项>Java>已安装的JRE(选中的是默认项)

如果您对tomcat文件进行了任何更改,特别是catalina.bat或startup.bat,那么您可能会告诉tomcat查看不同于设置为java_HOME C:\Program files(x86)\Apache\Apache-tomcat-7.0.26\bin的java版本

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

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

今天,这个错误消息出现在Ubuntu 12.04.2 LTS(Precise Pangolin)上的Tomcat 7中:

/var/log/tomcat7/localhost.2014-04-08.日志:2014年4月8日上午9:00:55 org.apache.catalina.core.StandardContext过滤器开始严重:启动筛选器支柱2时出现异常java.lang.UnsupportdClassVersionError:controller/ReqAccept:不支持的major.minor版本51.0(无法加载类控制器.ReqAccept)

Struts应用程序是用Java7编译的。

结果是,有人使用“service tomcat[stop/start]”重新启动tomcat 7,

$ps-ef|grep javatomcat7 31783 1 32 20:13?00:00:03/usr/lib/jvm/defaultjava/bin/java。。。$/usr/lib/jvm/defaultjava/bin/java-版本java版本“1.6.0_27”

这会导致“不支持的major.minor版本51.0”错误。

当我们使用“/etc/init.d/tomcat7[stop/start]”重新启动Tomcat 7时,问题得到了解决。

$ps-ef|grep javatomcat7 31886 1 80 20:24?00:00:10/usr/local/java/jdk1.7.0_15/bin/java$/usr/local/java/jdk1.7.0_15/bin/java-版本java版本“1.7.0_15”

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

我在Eclipse中的解决方案:

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

这对我有用。