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


当前回答

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

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

其他回答

如果在使用Maven时遇到此问题,可以使用插件Maven编译器编译代码。

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

UPDATE:如果您使用的是JDK8,请将源和目标设置为1.8。

我什么都试过了。重新安装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版本

如您所知,为jdk(Java开发工具包)bin目录设置环境变量Java_home总是一个很好的做法。

看看上面的问题,JRE运行时环境似乎正在寻找一个与JDk的Superset库不兼容的类。我建议直接从Oracle下载源获得完整的JDK和JRE或Jboss包(如果需要),以避免任何此类问题。

在我的案例中,问题出现在服务器运行时配置中:

检查JRE是否为所需版本:

该项目的版本为1.7,服务器JRE设置为1.6,在更改为正确的java版本后,它很好地启动了。

您的Java文件是用与您试图运行它的版本(较低运行时版本)不同的版本(较高的编译器版本)编译的。

基本的理解是,用较低版本编译的类预计将在以后的较高版本中运行。但相反的情况(用更高的编译器版本编译并尝试用更低的运行时版本运行)有时是不可能的。

因此,在尝试执行程序时,会显示此错误。不支持的major.minor版本x.x

Q: 我用Java7创建了一个应用程序,但当我的用户尝试运行它时,会出现不支持的major.minor版本51.0错误。什么这意味着什么?我该怎么办?A: 如果在Java7中使用javac编译应用程序,则生成的类文件将具有51.0版本号。的版本7之前的Java无法识别此数字,因此您的用户将在运行应用程序之前升级到Java 7。如果你不是使用任何Java 7 API,您都可以尝试使用javac-target1.6创建一个1.6兼容的类文件。如果您的应用程序是使用webstart部署的,您可以指定最小值需要版本。有关更多信息,请参阅Java Web Start上的文档这里是JNLP。一旦我们触发自动更新到适用于当前桌面上使用Java 6的最终用户的Java 7。这个这个时间表还没有确定,我们想给开发人员是时候先解决他们的代码和JDK7之间的任何问题了。

(来源:oracle.com)