我正在尝试使用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变量有什么区别?
如何修复?
此错误表示用于执行类代码的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,因此调用的不是您期望的版本。
正如一些人在其他地方回答的那样,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版本。
报告的主要数字如下:
Java SE 19 = 63,
Java SE 18 = 62,
Java SE 17 = 61,
Java SE 16 = 60,
Java SE 15 = 59,
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
(来源:维基百科)
要解决实际问题,您应该尝试使用较新版本的Java JRE运行Java代码,或者向Java编译器指定目标参数,以指示编译器创建与早期Java版本兼容的代码。
例如,为了生成与Java 1.4兼容的类文件,请使用以下命令行:
javac -target 1.4 HelloWorld.java
使用较新版本的Java编译器,您可能会收到关于未设置引导类路径的警告。有关此错误的更多信息,请参阅博客文章New-javac警告,该警告用于设置没有bootclasspath的旧源。