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


当前回答

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

其他回答

我在Grails项目的SpringSourceTool(STS)IDE中也遇到了同样的问题。我检查了已安装的Java版本和项目Java版本为1.7。*。后来我发现在GGTS.ini文件中,Java版本设置为1.6:

解决方案:

-Dosgi.requiredJavaVersion=1.6更改为-Dosgi.requiredJavaVersion=1.7在-vmargs之前添加以下两行-虚拟机jdk1.7.0_21/jre/lib/amd64/server/libjvm.so

问题已解决。编码愉快。

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

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

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

您试图使用不支持编译代码的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。

由于java9-target被--release替换。

在java11之前,--release的可用数字是6、7、8、9、10、11。你可以猜到未来的版本将是12、13,等等。

要为较旧的目标jvm进行编译,请使用javac-release7Tmp.java//这将生成.class文件,该文件可以在jvm>=7上运行,

然后,您可以通过以下方式检查目标版本:

javap-v Tmp|grep版本

在输出中,主版本标识目标jvm版本。

55->java 1154->java 1053->java 952->java 851->java 750->java 6

未来版本将删除更多旧版本:

从java 11开始,主要版本<=49(java版本<=5)不受支持。截至java 12和13,主要版本<=50(java版本<=6)不受支持。

您可以通过以下命令找到当前javac支持的目标版本:javac-help|grep发布