[windows] Groovy Shell 경고“prefs 루트 노드를 열거 나 만들 수 없습니다…”

groovyshWindows 8 에서 Groovy Shell ( ) 을 열려고 시도했지만 다음과 같은 결과가 나타납니다.

java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs
at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

위의 메시지를 인쇄 한 후 쉘이 예상대로 시작되었습니다.



답변

데니스 대답이 맞습니다. 그러나 솔루션을 좀 더 자세하게 설명하고 싶습니다 (Windows 사용자의 경우).

  1. 시작 메뉴로 이동 regedit하여 검색 필드에 입력하십시오 .
  2. 경로 탐색 HKEY_LOCAL_MACHINE\Software\JavaSoft(윈도우 10는 지금 여기를 갖고있는 것 같아요 : HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft)
  3. JavaSoft 폴더를 마우스 오른쪽 버튼으로 클릭하고 New->를 클릭하십시오.Key
  4. 새 키의 이름을 지정하면 Prefs모든 것이 작동합니다.

또는 *.reg다음 내용 으로 파일을 저장하고 실행 하십시오.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs]


답변

다음 레지스트리 키를 수동으로 만들어 문제를 해결할 수있었습니다.

HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs


답변

이것은 실제로 JDK 버그입니다. 수년에 걸쳐 여러 차례보고되었지만 8139507 에서만 마침내 Oracle에 의해 심각하게 채택되었습니다.

의 JDK 소스 코드에 문제가있었습니다 WindowsPreferences.java. 이 클래스에서 두 노드는 다음 userRootsystemRoot같이 정적으로 선언되었습니다.

/**
 * User root node.
 */
static final Preferences userRoot =
     new WindowsPreferences(USER_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);

/**
 * System root node.
 */
static final Preferences systemRoot =
    new WindowsPreferences(SYSTEM_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);

이것은 클래스가 처음으로 참조 될 때 정적 변수가 시작되고 이로 인해 HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs(= 시스템 트리)에 대한 레지스트리 키 가 작성되지 않은 경우 작성됩니다.

따라서 사용자가 자신의 코드로 모든 예방 조치를 취하고 시스템 트리를 만지거나 참조하지 않더라도 JVM은 실제로 인스턴스화하려고 시도 systemRoot하여 경고를 발생시킵니다. 흥미로운 미묘한 버그입니다.

2016 년 6 월 JDK 소스에 대한 수정 사항이 있으며 Java9 이후 버전입니다. u202에있는 Java8에 대한 백 포트 도 있습니다 .

당신이 보는 것은 실제로 JDK의 내부 로거의 경고입니다. 예외는 아닙니다. 사용자 코드가 실제로 시스템 환경 설정을 원하지 않는 한 경고를 안전하게 무시할 수 있다고 생각하지만 그 경우는 거의 없습니다.

보너스 정보

Java 1.7.21 이전의 버전에서는 버그가 나타나지 않았습니다. 그때까지 JRE 설치 프로그램이 레지스트리 키 HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs를 작성 하여 버그를 효과적으로 숨길 수 있기 때문 입니다. 반면에 시스템에 JRE를 설치하기 위해 설치 프로그램을 실행하지 않아도되거나 최소한 Sun / Oracle의 의도는 아닙니다. 아시다시피, Oracle은 JRE for Windows .tar.gz를 몇 년 동안 형식 으로 배포 해 왔습니다.


답변

64 비트 버전의 Windows에서이 문제를 해결하려는 경우 다음 키를 만들어야합니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs


답변

문제는 간단한 콘솔로 레지스트리를 편집 할 수 없다는 것입니다. 레지스트리를 직접 편집 할 필요없이 groovysh관리 권한으로 한 번만 실행하면 됩니다. 모든 후속 실행은 오류없이 작동합니다.


답변

Windows 8 64 비트에서 Apache Jmeter를 시작할 때 비슷한 문제가 발생했습니다.

[]apache-jmeter-2.13\bin>jmeter
java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs     at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

Mkorsch 설명과 함께 Dennis Traub 솔루션을 성공적으로 사용했습니다. 또는 확장자가 “reg”인 파일을 작성하여 다음에 쓸 수 있습니다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]

… 그런 다음 실행하십시오.


답변

다음과 같은 메시지가 나타납니다.

Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002

그리고이 레지스트리 키 중 하나를 만든 후에 사라졌습니다.내는 64 비트이므로 그렇게 시도했습니다.

32 bit Windows
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs

64 bit Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs