will come true

[Kotlin] UnsupportedClassVersionError / A JNI error has occurred 에러 해결 방법 본문

Kotlin

[Kotlin] UnsupportedClassVersionError / A JNI error has occurred 에러 해결 방법

haehyun 2023. 5. 11. 18:27

오류

오류가 날리 없는 간단한 코드를 실행하는데 아래와 같은 에러메시지가 출력된다.

C:\Users\bada7\.jdks\corretto-1.8.0_372\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\lib\idea_rt.jar=56634:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\charsets.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\access-bridge-64.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\cldrdata.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\dnsns.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\jaccess.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\jfxrt.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\localedata.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\nashorn.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\sunec.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\sunjce_provider.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\sunmscapi.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\sunpkcs11.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\ext\zipfs.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\jce.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\jfr.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\jfxswt.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\jsse.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\management-agent.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\resources.jar;C:\Users\bada7\.jdks\corretto-1.8.0_372\jre\lib\rt.jar;C:\workspace\02_Kotlin\Kotlin01_HelloWorld\out\production\Kotlin01_HelloWorld;C:\Users\bada7\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk8\1.8.20\kotlin-stdlib-jdk8-1.8.20.jar;C:\Users\bada7\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib\1.8.20\kotlin-stdlib-1.8.20.jar;C:\Users\bada7\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.8.20\kotlin-stdlib-common-1.8.20.jar;C:\Users\bada7\.m2\repository\org\jetbrains\annotations\13.0\annotations-13.0.jar;C:\Users\bada7\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk7\1.8.20\kotlin-stdlib-jdk7-1.8.20.jar MainKt
java.lang.UnsupportedClassVersionError: MainKt has been compiled by a more recent version of the Java Runtime (class file version 55.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:756)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:621)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" 
Process finished with exit code 1

 

엄청나게 많은 메시지가 줄줄이 출력됐지만 중요한 키워드는 아래 두개다.

- UnsupportedClassVersionError
- A JNI error has occurred

JNI 란?

: Java Native Interface(자바 네이티브 인터페이스)의 약자로, Android가 관리 코드에서 컴파일 하는 바이트 코드(Java 또는 Kotlin 프로그래밍 언어로 작성됨)와 네이티브 코드(C/C++로 작성됨)가 상호작용하는 방법을 정의한다.

Android Developers Guide, JNI 도움말

당장은 JNI에 대해 깊게 알 필요는 없고, 위 에러는 한 마디로
현재 Java Runtime이 실행 가능한 버전보다 높은 버전으로 컴파일해서 발생했다는 뜻이다.

즉, JDK 버전을 맞춰주면 되는데, 콘솔창과 환경변수를 이용하는 방법도 있지만 IntelliJ안에서 해결할 수도 있다.

 

해결

프로젝트 생성시 JDK 버전을 별도로 다운로드 받아서 변경한다.

1. [New Project] 창에서 JDK 선택란에서 [Download JDK] 클릭

2. 기존에 선택한 버전보다 높은 버전 선택 후 [Download] 클릭

3. 다시 같은 코드를 작성하고 실행(Run) 해보면 제대로 실행되는 걸 볼 수 있다.

Comments