博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java.lang.UnsupportedClassVersionError
阅读量:2533 次
发布时间:2019-05-11

本文共 5218 字,大约阅读时间需要 17 分钟。

java.lang.UnsupportedClassVersionError is one of the runtime error and thrown when a class is compiled by a more recent version that the current java version.

java.lang.UnsupportedClassVersionError是运行时错误之一,当使用比当前Java版本更高的版本来编译类时,抛出该错误。

java.lang.UnsupportedClassVersionError (java.lang.UnsupportedClassVersionError)

  • UnsupportedClassVersionError is an error, so we can’t do anything about it from application point of view to recover from it.

    UnsupportedClassVersionError是一个错误,因此我们无法从应用程序的角度对其进行任何操作以从中恢复。
  • java.lang.UnsupportedClassVersionError is a runtime error, it doesn’t come at compile time.

    java.lang.UnsupportedClassVersionError是运行时错误,它不是在编译时出现的。
  • Every java class contains a major.minor version number, this number denotes the java compiler version. Whenever we execute a java class and the class file version number is greater than current java version number, then java.lang.UnsupportedClassVersionError is thrown.

    每个java类都包含major.minor版本号,该数字表示java编译器版本。 每当我们执行一个Java类并且该类文件的版本号大于当前的Java版本号时,就会抛出java.lang.UnsupportedClassVersionError

Java版本和类Major.Minor版本 (Java Version and Class Major.Minor Version)

Below table lists the java version and corresponding class file major.minor version.

下表列出了Java版本和相应的类文件major.minor版本。

Java Version Class Major.Minor version
1.1 45.3
1.2 46.0
1.3 47.0
1.4 48.0
5 (1.5) 49.0
6 50.0
7 51.0
8 52.0
9 53.0
Java版本 类Major.Minor版本
1.1 45.3
1.2 46.0
1.3 47.0
1.4 48.0
5(1.5) 49.0
6 50.0
7 51.0
8 52.0
9 53.0

Java UnsupportedClassVersionError类图 (Java UnsupportedClassVersionError Class Diagram)

Below image shows the UnsupportedClassVersionError class diagram.

java UnsupportedClassVersionError class diagram

下图显示了UnsupportedClassVersionError类图。

java.lang.UnsupportedClassVersionError示例 (java.lang.UnsupportedClassVersionError Example)

We need two java versions to produce UnsupportedClassVersionError, I have both and installed in my system with java 8 being the default one.

我们需要两个Java版本来产生UnsupportedClassVersionError,我在系统中同时安装了和 ,而Java 8是默认版本。

pankaj:temp pankaj$ java -versionjava version "1.8.0_131"Java(TM) SE Runtime Environment (build 1.8.0_131-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)pankaj:temp pankaj$ /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java -versionjava version "9"Java(TM) SE Runtime Environment (build 9+181)Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)pankaj:temp pankaj$

I created a simple hello world class in the some directory for our example and then compiled it with java 9 and then tried to run it with java 8.

我在示例的some目录中创建了一个简单的hello world类,然后使用Java 9对其进行了编译,然后尝试使用Java 8对其进行运行。

pankaj:temp pankaj$ /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/javac HelloWorld.java pankaj:temp pankaj$ java HelloWorldError: A JNI error has occurred, please check your installation and try againException in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0	at java.lang.ClassLoader.defineClass1(Native Method)	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)	at java.security.AccessController.doPrivileged(Native Method)	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)pankaj:temp pankaj$

So we were able to reproduce UnsupportedClassVersionError, the stack trace clearly shows the “class file version 53.0” that corresponds to Java 9 and current java supports version up to 52.0 that corresponds to java 8.

因此,我们能够重现UnsupportedClassVersionError,堆栈跟踪清楚地显示了与Java 9对应的“类文件版本53.0”,而当前的Java支持与Java 8对应的版本52.0。

如何修复java.lang.UnsupportedClassVersionError (How to Fix java.lang.UnsupportedClassVersionError)

  1. If you have access to java source files, then you can recompile the class again and run it with the same version. So I can either compile HelloWorld class again or run it with java 9, both will work fine.
    pankaj:temp pankaj$ javac HelloWorld.java pankaj:temp pankaj$ java HelloWorldHello Worldpankaj:temp pankaj$

    如果您有权访问Java源文件,则可以再次重新编译该类并以相同版本运行它。 因此,我可以再次编译HelloWorld类或使用Java 9运行它,两者都可以正常工作。
  2. What if you don’t have access to source files such as third party jar files?

    In that case we will have to upgrade our java version to the one able to support it. Since stack trace clearly specifies the class file version number, so we know which java version to install to execute the program.

    在这种情况下,我们将必须将Java版本升级到能够支持它的版本。 由于堆栈跟踪明确指定了类文件的版本号,因此我们知道要安装哪个Java版本来执行程序。

That’s all for a quick roundup on java.lang.UnsupportedClassVersionError, it’s a very simple error to fix.

这就是对java.lang.UnsupportedClassVersionError的快速总结,这是一个非常简单的错误。

Reference: ,

参考: ,

翻译自:

转载地址:http://fcqzd.baihongyu.com/

你可能感兴趣的文章
mysql数据库的简单操作
查看>>
走过2013,走进2014
查看>>
修改tomcatlog输出等级
查看>>
数据结构 堆栈
查看>>
微信公众号开发C#系列-6、消息管理-普通消息接受处理
查看>>
RDIFramework.NET V2.9版本 WinFom部分新增与修正的功能
查看>>
AOP实战
查看>>
最大堆,最小堆及堆排序
查看>>
学习日记
查看>>
EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:内部搜索功能的实现
查看>>
四则运算--封装5.1
查看>>
Python中dunder名称的来历
查看>>
不知道下一步该怎么走
查看>>
并查集,合根植物
查看>>
C++中String类的字符串分割实现
查看>>
HelloWorld
查看>>
CSS3-animations
查看>>
轮廓系数
查看>>
【Luogu1272】重建道路(动态规划)
查看>>
一次开发逻辑规范的总结
查看>>