当前位置:   article > 正文

java.lang.UnsupportedClassVersionError

java.lang.unsupportedclassversionerror

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 VersionClass Major.Minor version
1.145.3
1.246.0
1.347.0
1.448.0
5 (1.5)49.0
650.0
751.0
852.0
953.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 Java 8 and java 9 installed in my system with java 8 being the default one.

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

  1. pankaj:temp pankaj$ java -version
  2. java version "1.8.0_131"
  3. Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
  4. Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
  5. pankaj:temp pankaj$ /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java -version
  6. java version "9"
  7. Java(TM) SE Runtime Environment (build 9+181)
  8. Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
  9. 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对其进行运行。

  1. pankaj:temp pankaj$ /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/javac HelloWorld.java
  2. pankaj:temp pankaj$ java HelloWorld
  3. Error: A JNI error has occurred, please check your installation and try again
  4. Exception 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
  5. at java.lang.ClassLoader.defineClass1(Native Method)
  6. at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  7. at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  8. at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
  9. at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
  10. at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
  11. at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
  12. at java.security.AccessController.doPrivileged(Native Method)
  13. at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
  14. at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  15. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
  16. at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  17. at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
  18. 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.
    1. pankaj:temp pankaj$ javac HelloWorld.java
    2. pankaj:temp pankaj$ java HelloWorld
    3. Hello World
    4. pankaj: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: API Doc, Exception Handling in java

参考: API DocJava中的异常处理

翻译自: https://www.journaldev.com/18083/java-lang-unsupportedclassversionerror

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/476723
推荐阅读
相关标签
  

闽ICP备14008679号