我正在尝试使用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变量有什么区别?
最常见的问题是JAVA_HOME变量配置错误,如果您安装了多个,该变量应指向正确的JAVA开发工具包库。
要查找SDK Java文件夹的位置,请运行以下命令:
jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
Debian/Ubuntu
要检查您安装了哪个java(openjdk),请通过以下方式进行检查:
dpkg -l "openjdk*" | grep ^i
or:
update-java-alternatives -l
要更改它,请使用:
update-alternatives --config java
如果需要,请使用sudo作为前缀。
选择另一个java版本。
或检查哪些可供安装:
apt-cache search ^openjdk
如果需要,请使用sudo作为前缀。
然后可以安装,例如:
apt-get install openjdk-7-jre
如果需要,请使用sudo作为前缀。
Fedora、Oracle Linux、Red Hat
通过以下方式安装/升级适当的软件包:
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
java-1.7.0-openjdk包仅包含java Runtime Environment。如果您想开发Java程序,请安装Java-1.7.0-openjdk-devel包。
BSD
FreeBSDPorts集合中有一个名为openjdk7的openjdk7包,可能需要重新配置。
请参阅:OpenJDK wiki页面。
窗户
只需从Oracle站点安装适当的Java SE开发工具包库或安装
詹金斯
如果您遇到Jenkins的问题,请参阅:
JENKINS-30561-无法使用SSH启动代理
然而,选择正确版本的Java(更新版本)和更新选项应该是可行的。
如何修复?
此错误表示用于执行类代码的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,因此调用的不是您期望的版本。