In this post we’ll discuss about java.lang.UnsupportedClassVersionError and how to fix it.
When is UnsupportedClassVersionError in Java thrown
UnsupportedClassVersionError is thrown when the Java Virtual Machine attempts to read a class file whose major and minor version numbers are not supported by the current JVM version. To understand it better you need some background on class file format and what are major and minor versions.
Java Virtual Machine class file format contains many sections, for UnsupportedClassVersionError the section of interest is the second section which tells the version of the class file format. This section is of 4 bytes, where 2 bytes are allotted to minor_version and 2 bytes to major_version. Together, a major and a minor version number determine the version of the class file format.
If the class file version is greater than what JVM supports java.lang.UnsupportedClassVersionError is thrown. The release level of the Java SE platform to which a Java Virtual Machine implementation conforms is responsible for determining the range of the major and minor versions supported by the JVM.
The major version number of a class file is derived from the Java version being used.
Java Version | Supported class version |
---|---|
Java SE 17 | 61 (0x3D hex) |
Java SE 16 | 60 (0x3C hex) |
Java SE 15 | 59 (0x3B hex) |
Java SE 14 | 58 (0x3A hex) |
Java SE 13 | 57 (0x39 hex) |
Java SE 12 | 56 (0x38 hex) |
Java SE 11 | 55 (0x37 hex) |
Java SE 10 | 54 (0x36 hex) |
Java SE 9 | 53 (0x35 hex) |
Java SE 8 | 52 (0x34 hex) |
Java SE 7 | 51 (0x33 hex) |
Java SE 6 | 50 (0x32 hex) |
Java SE 5 | 49 (0x31 hex) |
JDK 1.4 | 48 (0x30 hex) |
JDK 1.3 | 47 (0x2F hex) |
JDK 1.2 | 46 (0x2E hex) |
JDK 1.1 | 45 (0x2D hex) |
UnsupportedClassVersionError in Java example
Here is an example where UnsupportedClassVersionError is thrown. Java file is compiled using Java 12 compiler and then the class is executed using Java 10.
C:\Program Files\Java\jdk-10.0.1\bin>java -classpath F:\knpcodews\src\ com.knpcode.programs.Test Error: LinkageError occurred while loading main class com.knpcode.programs.Test java.lang.UnsupportedClassVersionError: com/knpcode/programs/Test has been compiled by a more recent version of the Java Runtime (class file version 56.0), this version of the Java Runtime only recognizes class file versions up to 54.0
Java UnsupportedClassVersionError hierarchy
UnsupportedClassVersionError is a descendant of java.lang.Error. Since it is of type Error so you can’t do any exception handling to recover from it.How to fix UnsupportedClassVersionError
UnsupportedClassVersionError is thrown when the JVM used to compile Java file and the JVM used to execute the Java class are not compatible so there are two options-
- Use the higher Java version to execute the Java class.
- If you can't use higher Java version then try to compile Java code files using the Java version that is used to run the application.
If you are using Eclipse IDE then you can select the required version of JRE by going to Window – Preferences – Java – Installed JREs. Click on Add and select the JDK from the installed folder.
You can also increase or decrease the compiler compliance level based on your requirement. Go to Project (from menu or right click current project) - properties – Java Compiler and then enable project specific settings to set compiler compliance level for the project.
That's all for the topic UnsupportedClassVersionError in Java and Resolution. If something is missing or you have something to share about the topic please write a comment.
You may also like
- ClassCastException in Java and Resolution
- Java Finally Block - Exception Handling
- Cannot Make a Static Reference to The Non-static Method or Field
- Java ConcurrentSkipListSet With Examples
- How to Convert a Runnable into a Callable in Java
- Compare Two Strings in Java - equals, compareTo() methods
- Spring Data JPA Example
- super() in Python With Examples
No comments:
Post a Comment