这个问题在这里已经有了答案:How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version (50 answers) Closed 6 years ago。
图片:
https://i.imgur.com/J6SWWBb.png
https://i.imgur.com/Xj8mCUp.png
你好.java
import java.applet.Applet;
import java.awt.*;
public class Hello extends Applet {
// Java applet to draw "Hello World"
public void paint (Graphics page) {
page.drawString ("Hello World!", 50, 50);
}
}
你好.html
<HTML>
<HEAD>
<TITLE>HelloWorld Applet</TITLE>
</HEAD>
<BODY>
<APPLET CODE="Hello.class" WIDTH=300 HEIGHT=150>
</APPLET>
</BODY>
</HTML>
错误
Hello : Unsupported major.minor version 52.0
问题可能是什么?
问题是因为 Java 版本不匹配。参考 JVM specification,以下是用于不同 Java 版本的类文件的主要版本。 (截至目前,所有版本都支持所有以前的版本。)
Java SE 版本 主要版本 1.0.2 45 1.1 45 (不是错字,相同版本) 1.2 46 1.3 47 1.4 48 5.0 49 6 50 7 51 8 52 9 53 10 54 11 55 12 56 13 57 14 58 15 59 16 60
这些是分配的主要号码。有关不支持的major.minor 版本的错误是因为在编译期间您使用的是更高的JDK 而在运行时使用的是更低的JDK。
因此,“major.minor version 52.0”错误可能是因为 jar 是在 JDK 1.8 中编译的,但您尝试使用 JDK 1.7 环境运行它。报告的号码是必需的号码,而不是您正在使用的号码。为了解决这个问题,最好让 JDK 和 JRE 指向同一个版本。
在 IntelliJ IDEA 中,
转到 Maven 设置 → Maven → 导入。将导入程序的 JDK 设置为 1.8。转到 Maven 设置 → Maven → Runner。将 JRE 设置为 1.8。转到菜单文件* → 项目结构 → SDK。确保 JDK 主路径设置为 1.8。
重启 IntelliJ IDEA。
另一种可能有帮助的方法是指示 IntelliJ IDEA 启动哪个 JDK 版本。
转到:/Applications/IntelliJ\ IDEA\ 15\ CE.app/Contents/Info.plist 并将 JVM 版本替换为:
<key>JVMVersion</key>
<string>1.8*</string>
解决该问题的智能 方法是使用最新的 SDK 进行编译,并在编译时使用 cross compilation options。要完全正确地使用选项,需要目标版本的 JRE(不是 JDK)的 rt.jar
。
鉴于该小程序的性质,它看起来可以编译为与 Java 1.1 一起使用,这意味着您将使用 javac -target 1.1
。
您需要在 IDE 中将编译器合规级别更改回 1.7。
这可以在 IDE 的首选项设置中完成。例如,在 Eclipse 中,转到菜单 Windows → Preferences,选择 Java,然后展开它。然后选择编译器并将合规级别更改为 1.7。我相信这将从那里开始工作。
您必须使用相同版本的 Java 运行和编译您的应用程序。
如果你使用 Eclipse,你应该做两件事:
在 Eclipse 中,单击“Window > Preferences”,然后在出现的窗口左侧的“Java”下,单击“Installed JREs”,单击“Add...”并导航到包含JDK。右键单击您的项目并单击“属性”,在出现的窗口中,在左侧,单击“Java 编译器”并取消选中“使用 Java 构建路径上的执行环境中的合规性”,这允许您选择在“编译器编译级别”列表中与您在上一步中设置的版本相同。
您需要将 Java 版本升级到 Java 8。
下载最新的 Java 存档
从其官方下载页面下载最新的 Java SE Development Kit 8 版本或使用以下命令从 shell 下载。
对于 64 位
# cd /opt/
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.tar.gz"
# tar xzf jdk-8u51-linux-x64.tar.gz
对于 32 位
# cd /opt/
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-i586.tar.gz"
# tar xzf jdk-8u51-linux-i586.tar.gz
注意:如果上述 wget 命令对您不起作用,请观看此示例视频以使用终端下载 Java 源代码存档。
使用替代方法安装 Java
解压存档文件后,使用alternatives 命令安装它。 chkconfig 包中提供了替代命令。
# cd /opt/jdk1.8.0_51/
# alternatives --install /usr/bin/java java /opt/jdk1.8.0_51/bin/java 2
# alternatives --config java
至此,Java 8 已成功安装在您的系统上。我们还建议使用替代设置 javac 和 jar 命令路径:
# alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_51/bin/jar 2
# alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_51/bin/javac 2
# alternatives --set jar /opt/jdk1.8.0_51/bin/jar
# alternatives --set javac /opt/jdk1.8.0_51/bin/javac
检查已安装的 Java 版本
使用以下命令检查已安装的 Java 版本。
root@tecadmin ~# java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
配置环境变量
大多数基于 Java 的应用程序都使用环境变量来工作。使用以下命令设置 Java 环境变量:
设置 JAVA_HOME 变量
# export JAVA_HOME=/opt/jdk1.8.0_51
Setup JRE_HOME Variable
# export JRE_HOME=$JAVA_HOME/jre
Setup PATH Variable
# export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
请注意,对 PATH 变量的更改将新的 Java bin 文件夹放在首位,以便它们覆盖路径中任何现有的 java/bins。在路径中保留两个 java/bin 文件夹有点草率,因此建议您将它们作为单独的任务进行清理。
此外,将上述所有环境变量放在 /etc/environment
文件中,以便在系统启动时自动加载。
我有同样的问题... JDK和插件版本冲突。
我使用 1.8 编译...最新的,并且该消息开始出现。所以我搜索了 JRE 7 (http://www.oracle.com/technetwork/java/javase/downloads/server-jre7-downloads-1931105.html)...并安装了它...再次...现在 1.8 和 1.7 在同一台计算机上。
使用 NetBeans,编译并定位到 1.7 版,解决了我的问题。
如果您在 Android Studio 中遇到问题并且您安装了 Android N,请将 Android 渲染版本更改为旧版本,问题就会消失。
https://i.stack.imgur.com/mn0Nk.png
如果您使用的是 NetBeans IDE,请右键单击项目并选择 Properties 并转到源,您可以将 Source/Binary Format 更改为较低的 JDK 版本。
https://i.stack.imgur.com/6O2jL.png
当您尝试将使用 Java 1.8 编译器编译的类运行到较低的 JRE 版本(例如 JRE 1.7 或 JRE 1.6)时,会出现不支持的 major.minor 版本 52.0。修复此错误的最简单方法是安装最新的 Java 版本,即 Java 8 并运行您的程序。
阅读更多:http://javarevisited.blogspot.com/2015/05/fixing-unsupported-majorminor-version.html#ixzz4AVD4Evgv
当您在 java 的 higher version
(比如 jdk 1.8)上编译项目然后在 lower version
(比如 jdk 1.7)上运行它时,就会发生这种情况。
如果您的项目路径中有 JRE-1.7 库,那么,
1.右键项目
2.进入属性
3.选择项目方面
4.在行中查找Java,然后选择版本(比如1.7)如果使用JRE-1.7
5.单击应用并运行您的项目。
我通过删除旧版本的 JRE 并安装 JRE 8 解决了我的问题。
我可以使用以下解决方案解决相同的问题。
在我的项目中,我添加了一个用 Java 8 创建的 JAR 文件。我的项目指的是 JRE 7。当我将项目 JRE 更改为 8 时,我的问题就解决了。
脚步:
在 Eclipse 中,右键单击项目资源管理器中的项目名称 → 构建路径 → 库 → 单击 JRE 版本 → 单击 Edit → Installed JRE → 添加 → Standerd VM → 选择 JRE主页点击路径(路径应为 localePath\java\jdk1.8.0_25\jre
)→ 提供名称 → 保存 → 为项目选择相同的 JRE → 完成 → OK。刷新/构建项目一次→尝试运行您的 Java 文件。它应该工作。
我安装了 Java 1.7 和 1.8(使用需要 Java 1.8 的 SBT 2.4)。即使我的项目链接到 Java 1.8,我也必须将 JAVA_HOME 环境变量更改为指向 1.8。最后,问题解决了。
如果您使用的是 Eclipse,请确保您的菜单项目 → 属性 → Java 构建路径 → 库 → JRE 系统库符合您的项目要求(如图所示)。
https://i.stack.imgur.com/VrV5R.png
解决问题所需要做的就是……确保您的 Java 版本对于编译和运行都是相同的。无论您使用什么工具或 IDE。
如果您使用的是 Linux 并且安装了不同版本的 Java,请使用以下命令:
sudo update-alternatives --config java
这将提供一种在系统上安装的 Java 版本之间快速切换的方法。通过选择 Java 8,我将解决您的问题。
当我安装一个新的 Java 1.8 时,我发生了这种情况,但让旧的命令行解释器保持打开状态。
它有一条旧路径并继续使用 Java 1.7 执行应用程序,而项目已经使用 Java 1.8 构建。
如果您的 JDK 版本正确。可能导致此错误的另一个原因是您的 Android Studio 版本较低,但您的 Gradle 版本过高。 Upgrade your IDE to a newer version
可能对此有所帮助。
将您的 Andorra 版本升级到 JDK 1.8。
这是您的编译器正在寻找 Java 版本 8 并且您拥有 Java 版本 7 的版本不匹配。
您可以在版本 8 中运行版本 7 中的应用程序构建,但反之亦然,因为当涉及更高级别时,版本嵌入了更多功能和增强功能,而不是以前的版本。
Download JDK version from this link
并为此设置您的JDK路径
您需要使用 JDK 1.7.0 而不是 JDK 1.8.0。
为了确保这一点,您需要删除计算机上的 JDK 1.8.0。
如果您使用 Mac,则需要删除:
/库/Java/JavaVirtualMachines/jdk.jdk
/Library/PreferencePanes/JavaControlPanel.prefPane
/Library/Internet 插件/JavaAppletPlugin.plugin
然后,您需要重新安装JDK 1.7.0,您将成功生成.jar 文件。
如果您使用的是 Eclipse v4.4 (Luna) 并且已经完成了上述所有步骤,您可能需要检查您的运行配置设置。
可能有多种可能导致此错误。根本原因是项目需要在JDK1.8/JRE8编译而环境编译器是JDK1.7/JRE7不匹配。
您可以检查 my blog post 以检查您的所有设置是否正确。
这些答案都没有帮助我,但我找到了解决方案。我有一个在 Wildfly 8.2 中使用的 webproject,使用 Maven 构建,源和目标在 maven-compiler-plugin 上设置为 1.8,所有 Eclipse 和 Maven 设置都设置为 Java 1.8。问题是 Wildfly 8.2 无法处理 Java 1.8,所以我必须将所有内容都设置为 1.7 并且它工作正常。
只想添加这个。我今天遇到了这个问题。调整了我项目中的设置,重建,同样的问题。我(错误地)假设更改我的项目(Eclipse)中的设置会导致我的项目所依赖的项目也被重新编译。调整依赖关系树上所有项目的设置解决了这个问题。
我在 Mac OS X v10.9(小牛队)的 Eclipse 中遇到了这个问题。我在 Stack Overflow 上尝试了很多答案......最后,经过一整天,我 *安装了新版本的 Android SDK(并更新了 Eclipse,菜单 Project → Properties< /em> → Android 以使用新路径)*。
我必须获得 SDK 更新,但只删除那些我认为必要的更新,避免使用我不使用的 API(如 Wear 和 TV).. 这样就成功了。显然,我似乎在途中的某个地方损坏了我的 SDK。
顺便说一句 .. 我确实在我的工作区中看到了一个项目的错误重新出现,但它似乎与我没有使用的 appcompat-7 的导入有关。在对该项目进行 rm-ing 之后,到目前为止还没有看到问题再次出现。