Linux Programmer

Java 에러 : could not find java.dll 본문

컴퓨터 관련/윈도 패밀리

Java 에러 : could not find java.dll

sunyzero 2018. 9. 26. 21:39

Windows 시스템에서 java를 설치했다가 삭제 후 다른 버전으로 설치한 경우에 java.dll 혹은 Java SE Runtime Environment 에러가 발생할 수 있다. 이에 대한 해결 방법은 다음과 같다.


1. 에러 현상 : Error message


C:> java.exe

Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'

Error: could not find java.dll

Error: Could not find Java SE Runtime Environment.


java 실행시 위와 같은 메시지가 발생하는 경우에는 Java가 설치되어있음에도 그 경로를 찾지 못하는 것이다.



2. 에러 해결 방법


먼저 java가 설치되어있는 위치와 JAVA_HOME, JAVA_PATH를 확인한다. 아래 Get-command, echo 등의 명령어는 powershell에서 실행한 것이다. 참고로 특정 디렉터리에서 powershell을 실행하려면 탐색기 경로 부분을 클릭하고 디렉터리명이 보이는 곳에 powershell을 입력하면 된다.


C:> get-command java.exe


CommandType   Name       Version    Source

-----------   ----       -------    ------

Application   java.exe   8.0.171... C:\ProgramData\Oracle\Java\javapath\ja..


Get-Command 명령으로 보면 이 시스템은 C:\ProgramData\Oracle\Java\javapath\ja... 에서 java.exe를 실행하고 있다. 그러면 이번에는 JAVA_HOME과 PATH 환경 변수도 확인해보자. (환경 변수는 powershell에서 echo 명령으로 확인하거나 '고급 시스템 설정' >> '고급' >> '환경 변수'에서 확인할 수도 있다. 아래 그림은 고급 시스템 설정에서 확인하는 메뉴 화면이다. (고급 시스템 설정 창은 제어판에서 직접 찾거나 'Win+Break' 단축키로 불러 올 수 있다.)


Windows 시스템 속성Windows 시스템 속성

아래는 파워셸에서 echo 명령으로 JAVA_HOME과 PATH 환경 변수를 확인한 모습이다.


PS C:\> echo $env:path

C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Git\cmd;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Common Files\Acronis\VirtualFile\;C:\Program Files (x86)\Common Files\Acronis\VirtualFile64\;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility;C:\Program Files\Zulu\zulu-8\bin\;C:\Users\SY.Kim\AppData\Local\Microsoft\WindowsApps;C:\Users\SY.Kim\AppData\Local\Programs\EmEditor;


C:\> echo $env:java_home

C:\Program Files\Zulu\zulu-8



get-command 결과를 보면 java.exe가 잘못 잡혀있다. 이 시스템은 Oracle java를 설치했다가 삭제 후 Zulu java를 설치했는데, Oracle java를 삭제했음에도 설정이 남아있어서 문제가 된 것이다.


이를 해결하기 위해 C:\ProgramData\Oracle\Java 디렉터리를 삭제하면 된다. 삭제 후 다시 get-command를 해보면 위치가 바뀌어 있는 것을 볼 수 있다.


C:> Get-Command java.exe


CommandType   Name       Version    Source

-----------   ----       -------    ------

Application   java.exe   8.30.0.1   C:\Program Files\Zulu\zulu-8\bin\java.exe



3. 근본적인 원인 제거

Oracle JDK를 한 번 설치했다가 삭제해도 흔적이 남는 것은 registry에 남아있기 때문이다. 이를 해결하기 위해서는 PATH에서 Oracle JDK의 흔적을 지워야 한다. 레지스트리 에디터(regedit)를 실행하고 다음 경로를 가보자.


HKLM\SYSTEM\ControlSet001\Control\Session Manager\Environment


예를 들어 위와 같이 오류가 발생한 시스템에서는 위 registry key에 다음과 같은 value가 들어있다.


C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Git\cmd;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Common Files\Acronis\VirtualFile\;C:\Program Files (x86)\Common Files\Acronis\VirtualFile64\;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;%SYSTEMROOT%\System32\OpenSSH\;C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility;C:\Program Files\Zulu\zulu-8\bin\


레지스트리 키 맨 앞에 C:\ProgramData\Oracle\java\javapath 경로가 남아있는데, 편집해서 이 부분을 삭제하면 된다.




반응형
Comments