我编译的JAR文件无法运行:“Unsupported major.minor version 52.0”。

3
我最近从旧硬盘中恢复了一些程序,因此我尝试编译并运行其中一个程序,在命令提示符中出现以下错误:

Unsupported major.minor version 52.0

我使用Java 8编译程序,并在Java 8上运行它。唯一能想到的就是我在旧电脑上用Java 7运行了该程序。此外,我在这台新电脑上使用Windows XP,而在旧电脑上使用Windows 7。

我正在使用两个库,但我不认为这是问题所在,因为该程序在NetBeans中可以正常运行。

有什么想法解决这个问题吗?

请仔细检查您的环境变量。您的IDE可能指向Java 8,但您的系统正在运行Java 7或更早版本。 - Hypino
我已经检查过了,而且我再次检查了。Java home和path指向Java 8。 - user1845954
如果您是通过命令行获取该信息的,请尝试使用“java -version”命令。 - user1071777
请确保您查看侧边栏上的相关问题列表,这是Stack上的热门话题。 - Simon
我已经编译了这个程序使用的是Java 8,并且我也用Java 8运行了它。 - user1845954
2个回答

1
根据您对原型答案的评论,我猜测Java 7位于您的Windows目录之一,例如C:\ Windows \ System32,并且该目录在您的PATH中的JAVA_HOME目录之前。尝试在CMD上键入“where java”。如果它在多个目录中,请查看哪个目录先出现在您的PATH变量中,并查看该目录中Java的版本。

CMD提示命令“where java”(不带引号)未被识别。我做错了什么吗? - user1845954
不,也许“where”命令并不包含在所有版本的DOS中。请查看您的C:\Windows\System32目录,并查看其中是否有java.exe。如果确实有,请键入“C:\Windows\System32\java -version”并查看它是什么版本。如果是版本7,则键入“echo %PATH%”并查看C:\Windows\System32是否出现在路径列表中的JAVA_HOME\bin目录之前。如果是这样,请从C:\Windows\System32中删除java.exe或更改PATH变量以在列表中列出JAVA_HOME\bin目录之前的C:\Windows\System32。另外,请确保JAVA_HOME\bin已经在您的路径中。 - David A

0
问题的根本原因是代码是在较新的版本中编译的,但您的默认运行时却在较低的版本上运行。您可以通过简单地检查当前版本来解决这个问题。java -versionjavac -version。您可能需要从控制面板中检查Java。要验证您的JAR文件的实际版本,您可能需要提取实际版本并查找版本信息。 javap -verbose <Java_Class_Name> | findstr "major"

这很奇怪。我在CMD中执行了java -version命令,结果显示为7。然而,我已经将所有的环境变量设置为Java 8,所以我不知道该如何解决这个问题。 - user1845954
@user1845954 - 我认为你需要了解一下Windows环境变量的实际工作原理;例如,它们的值如何从设置它们的位置传播到使用它们的位置。 - Stephen C
是的,我理解它们的基本概念,但你可能是对的...环境变量可能是问题所在,因为XP无法加载Java 8安装程序,所以我不得不提取安装程序内容并手动添加环境变量。这就是我可能出错的地方。目前,我只下载了Java 7 JDK。感谢您的建议。 - user1845954

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接