修复 Java 错误 java.lang.UnsupportedClassVersionError
本篇文章介绍了 Java 中的 Exception in thread main java.lang.UnsupportedClassVersionError 错误。
java.lang.UnsupportedClassVersionError的原因
UnsupportedClassVersionError 是 ClassFormatError 异常的子类,当 JVM 尝试读取类并发现类文件格式错误或文件无法解释为类时,会抛出该异常。 以下是 UnsupportedClassVersionError 异常的层次结构:
Java.Lang.Object
Java.Lang.Throwable
Java.Lang.Error
Java.Lang.LinkageError
Java.Lang.ClassFormatError
Java.Lang.UnsupportedClassVersionError
UnsupportedClassVersionError 异常专门用于检测以前由较低版本的 Java 运行而现在由较新版本运行的类文件。
例如,假设一个 Java 文件由 JDK 12 运行,现在由较新的 JRE 8 运行。在这种情况下,它将抛出 UnsupportedClassVersionError 异常,或者如果我们使用 Java 版本 1.8 编译该类并使用 Java 1.7 编译它,它将抛出 UnsupportedClassVersionError 异常。 抛出同样的错误。
让我们尝试一个由较新版本的 Java 编译然后由旧版本运行的类中的示例。 参见示例:
public class Unsupported_Class_Version_Error{
public static void main(String args[]) {
System.out.println("Hello this is Delftstack.com");
}
}
上面的代码将抛出 UnsupportedClassVersionError ,如下所示:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Unsupported_Class_Version_Error : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
输出显示错误,因为代码是在 Java 1.8 上编译并在 Java 1.7 上执行的。 这就是为什么会抛出线程“main”java.lang.UnsupportedClassVersionError: Unsupported_Class_Version_Error : Unsupported Major.minor version 52.0 中的异常。
修复 java.lang.UnsupportedClassVersionError
出现这个错误有两个条件,所以解决办法就在于这两个条件:
- 使用最新的 JDK 和 JRE 运行代码。
- 使用旧版本的 JDK 编译代码以匹配运行时 JDK。
- 一种简单的解决方案是使用 Java 交叉编译。 如果生产环境的JDK低于构建环境,我们可以通过交叉编译生成较低版本的class文件。
以下命令将用于为上面的代码创建一个类文件:
javac -target 1.7 Unsupported_Class_Version_Error.java
如上所述,解决方案是在编译时和运行时使用相同版本构建应用程序,或者至少编译时版本低于运行时版本。
上面的错误显示了主要次要版本问题。 Major Minor版本是JRE的版本; 例如,对于 JRE 8,主要版本是 52.0。
我们必须确保在编译和执行Java Class文件时不会出现Major Minor版本问题。 与该类兼容的 JRE 版本列表是:
Java SE 17 = 61,
Java SE 16 = 60,
Java SE 15 = 59,
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,