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


当前回答

在安装了Homebrew的Mac OS X上修复此问题的另一种方法是:

brew install Caskroom/cask/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版本

噢,Mac OS X我可以通过设置JAVA_HOME变量来解决这个问题:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home

如果在使用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。

正如一些人在其他地方回答的那样,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

首先,让我们正确掌握一些基本知识。。。

JRE是NetBeans/Eclipse/standalone中的一个组件,它将为您提供库、JVM、Java插件和Java web启动。注意,它不提供编译器或调试器。

JDK是JRE以及编译器和调试器的超集。

因此,当您将默认库作为JRE而不是JDK时,您将很容易导入内容,但它不会编译。

相反,将路径设置为JDK(我使用NetBeans,我使用NetBeans/etc/NetBeans.conf中的NetBeans.coff设置它们并更改路径)。