660

Pictures:

Command Prompt showing versions Command Prompt showing versions

Picture of error Picture of error

Hello.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);
    }
}

Hello.html

<HTML>
    <HEAD>
        <TITLE>HelloWorld Applet</TITLE>
    </HEAD>

    <BODY>
        <APPLET CODE="Hello.class" WIDTH=300 HEIGHT=150>
        </APPLET>
    </BODY>
</HTML>

Error

Hello : Unsupported major.minor version 52.0

What may the problem be?

4

26 回答 26

688

问题是因为 Java 版本不匹配。参考JVM 规范,以下是用于不同 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 中,

  1. 转到Maven 设置Maven导入。将导入程序的 JDK 设置为 1.8。
  2. 转到Maven 设置MavenRunner。将 JRE 设置为 1.8。
  3. 转到菜单文件* →项目结构SDKs。确保 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>
于 2016-03-08T11:22:33.290 回答
91

解决该问题的明智方法是使用最新的 SDK 进行编译,并在编译时使用交叉编译选项要完全正确地使用这些选项,需要目标版本rt.jar的 JRE(而不是 JDK)。

鉴于该小程序的性质,它看起来可以编译为与 Java 1.1 一起使用,这意味着您将使用javac -target 1.1.

于 2014-03-19T05:10:11.153 回答
64

您需要在 IDE 中将编译器合规级别更改回 1.7。

这可以在 IDE 的首选项设置中完成。例如,在 Eclipse 中,转到菜单WindowsPreferences,选择 Java,然后展开它。然后选择编译器并将合规级别更改为 1.7。我相信这将从那里开始工作。

于 2014-11-12T15:38:37.047 回答
52

您必须使用相同版本的 Java 运行和编译您的应用程序。

如果你使用 Eclipse,你应该做两件事:

  1. 在 Eclipse 中,单击“Window > Preferences”,然后在出现的窗口左侧的“Java”下,单击“Installed JREs”,单击“Add...”并导航到包含JDK。

  2. 右键单击您的项目并单击“Properties”,在出现的窗口中,在左侧,单击“Java Compiler”并取消选中“Use compliance from execution environment on the Java Build Path”,这允许您选择在“编译器编译级别”列表中与您在上一步中设置的版本相同。

于 2015-03-20T22:03:55.693 回答
25

您需要将 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文件中,以便在系统启动时自动加载。

于 2015-08-24T08:50:01.493 回答
23

我有同样的问题... 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 版,解决了我的问题。

于 2014-05-30T16:13:59.080 回答
19

如果您在 Android Studio 中遇到问题并且您安装了 Android N,请将 Android 渲染版本更改为旧版本,问题就会消失。

在此处输入图像描述

于 2016-03-10T12:59:44.117 回答
17

如果您使用的是 NetBeans IDE,请右键单击项目并选择Properties并转到sources,您可以将 Source/Binary Format 更改为较低的 JDK 版本。

在此处输入图像描述

于 2014-09-16T13:52:09.523 回答
15

当您尝试将使用 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

于 2016-06-03T08:19:59.853 回答
11

我通过删除旧版本的 JRE 并安装 JRE 8 解决了我的问题。

于 2016-07-10T11:37:50.413 回答
11

当您在higher versionjava(比如 jdk 1.8)上编译项目然后在 a lower version(比如 jdk 1.7)上运行它时,就会发生这种情况。

如果您的项目路径中有 JRE-1.7 库,那么,

1.右键项目

2.进入属性

3.选择项目方面

4.在行中查找Java,然后选择版本(比如1.7)如果使用JRE-1.7

5.单击应用并运行您的项目。

于 2016-04-30T04:31:37.740 回答
10

我可以使用以下解决方案解决相同的问题。

在我的项目中,我添加了一个在 Java 8 中创建的 JAR 文件。我的项目指的是 JRE 7。当我将项目 JRE 更改为 8 时,我的问题就解决了。

脚步:

在Eclipse中,在项目资源管理器中右键单击项目名称→构建路径→库→单击JRE版本→单击编辑安装的JRE →添加→Standerd VM→选择JRE主页单击路径(路径应为localePath\java\jdk1.8.0_25\jre)→提供名称→保存→ 为项目选择相同的 JRE → 完成 → OK. 刷新/构建项目一次→尝试运行您的 Java 文件。它应该工作。

于 2015-08-28T10:31:30.480 回答
9

我安装了 Java 1.7 和 1.8(使用需要 Java 1.8 的 SBT 2.4)。即使我的项目链接到 Java 1.8,我也必须将 JAVA_HOME 环境变量更改为指向 1.8。最后,问题解决了。

于 2015-06-17T16:50:26.843 回答
6

解决问题所需要做的就是……确保您的 Java 版本对于编译和运行都是相同的。无论您使用什么工具或 IDE。

于 2016-05-06T17:53:08.960 回答
6

如果您使用的是 Eclipse,请确保您的菜单项目属性Java 构建路径JRE 系统库符合您的项目要求(如图所示)。

在此处输入图像描述

于 2015-09-20T09:09:43.213 回答
5

当我安装一个新的 Java 1.8 时,我发生了这种情况,但让旧的命令行解释器保持打开状态。

它有一条旧路径并继续使用 Java 1.7 执行应用程序,而项目已经使用 Java 1.8 构建。

于 2015-02-11T22:32:25.493 回答
5

如果您使用的是 Linux 并且安装了不同版本的 Java,请使用以下命令:

sudo update-alternatives --config java

这将提供一种在系统上安装的 Java 版本之间快速切换的方法。通过选择 Java 8,我将解决您的问题。

于 2016-04-04T19:46:22.513 回答
4

如果您的 JDK 版本正确。可能导致此错误的另一个原因是您的 Android Studio 版本较低,但您的Gradle版本过高。Upgrade your IDE to a newer version可能会有所帮助。

于 2016-06-18T06:38:10.453 回答
4

将您的 Andorra 版本升级到 JDK 1.8。

这是您的编译器正在寻找 Java 版本 8 并且您拥有 Java 版本 7 的版本不匹配。

您可以在版本 8 中运行版本 7 中的应用程序构建,但反之亦然,因为当涉及到更高级别时,版本嵌入了更多功能和增强功能,而不是以前的版本。

从此链接下载 JDK 版本

并为此设置您的JDK路径

于 2016-07-01T11:49:17.297 回答
3

如果您使用的是 Eclipse v4.4 (Luna) 并且已经完成了上述所有步骤,您可能需要检查您的运行配置设置。

可能有多种可能导致此错误。根本原因是项目需要在JDK1.8/JRE8编译而环境编译器是JDK1.7/JRE7不匹配。

您可以查看我的博客文章以检查您的所有设置是否正确。

于 2015-04-15T04:00:26.033 回答
3

您需要使用 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 文件。

于 2015-06-04T08:18:56.093 回答
1

这些答案都没有帮助我,但我找到了解决方案。
我有一个在 Wildfly 8.2 中使用的 webproject,使用 Maven 构建,源和目标在 maven-compiler-plugin 上设置为 1.8,所有 Eclipse 和 Maven 设置都设置为 Java 1.8。问题是 Wildfly 8.2 无法处理 Java 1.8,所以我必须将所有内容都设置为 1.7 并且它工作正常。

于 2015-06-20T14:24:54.803 回答
1

如果您使用的是IntelliJ IDEA,请转到项目结构 ( Ctrl++ Alt) ,您可以更改项目的 JDK。ShiftS

于 2015-10-19T12:29:19.283 回答
1

我在Mac OS X v10.9 (Mavericks)上的 Eclipse 中遇到了这个问题。我在 Stack Overflow 上尝试了很多答案……最后,一整天后,我*安装了新版本的 Android SDK(并更新了 Eclipse,菜单ProjectPropertiesAndroid以使用新路径)*

我必须获得 SDK 更新,但只删除那些我认为必要的更新,避免使用我不使用的 API(如 Wear 和 TV)..这样就成功了。显然,我似乎在途中的某个地方损坏了我的 SDK。

顺便说一句 .. 我确实在我的工作区中看到了一个项目的错误重新出现,但它似乎与我没有使用的 appcompat-7 的导入有关。在对该项目进行 rm-ing 之后,到目前为止还没有看到问题再次出现。

于 2016-03-18T05:25:23.713 回答
1

只需访问http://java.com/en/download/并更新您的 JRE 版本

于 2016-05-05T18:59:37.650 回答
1

只想添加这个。我今天遇到了这个问题。调整了我项目中的设置,重建,同样的问题。我(错误地)假设更改我的项目(Eclipse)中的设置会导致我的项目所依赖的项目也被重新编译。调整依赖关系树上所有项目的设置解决了这个问题。

于 2015-12-10T10:47:37.733 回答