我正在尝试使用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(更新版本)和更新选项应该是可行的。
正如一些人在其他地方回答的那样,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
许多答案都与IDE类似,如Eclipse。然而,这个问题与Notepad++的本地开发有关。
命名错误的核心原因是使用的Java运行时环境和使用的类库不匹配。以下描述的目标是在不进行任何额外安装的情况下进行编译。
1) 检查PATH变量中的定义。如果定义了:
C: \Program Files(x86)\Common Files\Oracle\Java\javapath
和/或
C: \ProgramData\Oracle\Java\javapath
这些路径链接到具有固定java版本的java/javac。您可以使用javac-version检查此文件夹中的版本。结果可能是:
java版本“1.8.0_231”
这意味着正在使用Java版本8。将此条目替换为%JAVA_HOME%\bin。如果JDK是手动安装的,请检查环境中是否设置了JAVA_HOME。如果没有,请在此处添加,例如:
JAVA_HOME=“C:\Program Files\JAVA\jdk1.7.0_80”
2) 我已经用gradle在命令行上构建了这个项目。在build.gradle中定义了:
android {
buildToolsVersion "24.0.1"
dependencies {
compile 'com.android.support:design:23.0.1'
compile 'com.android.support:support-v4:23.0.1'
...
}
...
}
使用的构建工具dx文件比其他组件更新。因此,需要进行修改:
buildTools版本“23.0.1”
今天,这个错误消息出现在Ubuntu 12.04.2 LTS(Precise Pangolin)上的Tomcat 7中:
/var/log/tomcat7/localhost.2014-04-08.日志:2014年4月8日上午9:00:55 org.apache.catalina.core.StandardContext过滤器开始严重:启动筛选器支柱2时出现异常java.lang.UnsupportdClassVersionError:controller/ReqAccept:不支持的major.minor版本51.0(无法加载类控制器.ReqAccept)
Struts应用程序是用Java7编译的。
结果是,有人使用“service tomcat[stop/start]”重新启动tomcat 7,
$ps-ef|grep javatomcat7 31783 1 32 20:13?00:00:03/usr/lib/jvm/defaultjava/bin/java。。。$/usr/lib/jvm/defaultjava/bin/java-版本java版本“1.6.0_27”
这会导致“不支持的major.minor版本51.0”错误。
当我们使用“/etc/init.d/tomcat7[stop/start]”重新启动Tomcat 7时,问题得到了解决。
$ps-ef|grep javatomcat7 31886 1 80 20:24?00:00:10/usr/local/java/jdk1.7.0_15/bin/java$/usr/local/java/jdk1.7.0_15/bin/java-版本java版本“1.7.0_15”