"javac" 명령어로 컴파일하고 "java" 명령어로 실행하려는데 아래와 같은 에러가 났다.
Error: A JNI error has occurred, please check your installation and try again
이어서 아래와 같은 내용이 써 있다.
Exception in thread "main" java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recognizes class file versions up to 52.0
현재 Java Runtime 이 실행 가능한 버전보다 높은 버전으로 컴파일해서 발생했다는 뜻이다.
이는 환경변수 때문이다. 환경변수의 자세한 동작원리에 대해서는 아래 글에 설명하였다.(예상 읽기시간: 3분)
https://hoohaha.tistory.com/m/93
이를 해결하는 방법은 두 가지이다.
1. javac 명령어에 "--release 8"을 추가하여 낮은 버전으로 자바 버전을 맞춘다. (빠름, 일시적)
2. 환경변수를 수정하여 java와 javac 명령어가 사용하는 자바의 버전을 맞춘다. (귀찮음, 비교적 영구적)
1. javac 명령어에 "--release 8"을 추가하여 낮은 버전으로 자바 버전을 맞춘다.
위와 같이 잘 실행됨을 알 수 있다. 당장 급하고 1회성이라면 여기까지만 보아도 충분하다.
참고로 javac의 --release 옵션 설명은 아래와 같다.
"javac -help"를 입력하면 아래와 같이 여러 옵션들의 설명이 나오는데 해당 부분을 발췌하면 아래와 같다.
해석하면 "지정된 Java SE 릴리즈에 대해 컴파일합니다. 지원되는 릴리즈: 7, 8, 9, 10, 11, 12, 13"라는 뜻이다. 이 버전을 8로 맞춰 컴파일했으니 구버전 java 명령어로도 실행이 가능한 것이다.
2. 환경변수를 수정하여 java와 javac 명령어가 사용하는 자바의 버전을 맞춘다.
해당 방법은 아래에 포스팅하였다. 위의 ''--release" 명령어를 매번 치기 귀찮으면 아래의 방법을 시도하길 바란다.
이 글이 도움이 되었기를 바랍니다.
'CS > Java' 카테고리의 다른 글
[Java] 자바 입문 강의 텍스트 정리 (0) | 2021.10.15 |
---|---|
[Java] java 와 javac 버전 차이날 때 해결하는 방법 (4) | 2021.05.24 |
[Java] java, javac 명령어로 컴파일하고 실행하는 방법 (0) | 2021.05.23 |
[Java] 자바 정적, 동적 쓰레드 할당 및 분석(소수 계산) (0) | 2021.05.09 |
[Java] 자바 멀티코어 쓰레드 분석 (0) | 2021.04.26 |