我正在尝试使用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>

其他回答

在使用Ant脚本构建应用程序时,我也遇到过同样的问题。

我使用Eclipse进行应用程序开发,并在项目的构建财产中更改了编译器版本。但这对我不起作用。然后我发现我可以在Ant脚本中提供编译器版本。

我在Ant脚本编译Java文件的部分修改了它。

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

这对我解决不受支持的主要次要问题起到了作用。

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

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

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

您可以用Java7编译一些JAR库,而Java运行时只有Java6。这可能发生在一些新的图书馆中。

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

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

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

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

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