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


188

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.

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



1
백업 저장소 로 파일에 저장된 환경 설정 은 문제를 완전히 피해야합니다. 최종 사용자가 가증 한 레지스트리 를 변경 하는 것이 실용적인 해결책이 아닌 상황이 있습니다.
Dave Jarvis

2
WIndows 10에서 여전히 알려진 Java 버그이며 112 업데이트입니다. 관리자 권한 프롬프트에서 프로그램을 한 번 실행하면 사라집니다.
david.pfx

답변:


328

데니스 대답이 맞습니다. 그러나 솔루션을 좀 더 자세하게 설명하고 싶습니다 (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]

7
프로그래밍 방식으로이 작업을 수행 할 수 있습니까?
facetoe

12
HKEY_CURRENT_USER에서 완료하면 작동하지 않는 것을 확인할 수 있습니다. 더 나은 질문, 왜 지구상에서 Java 기반 제품이 Windows 레지스트리에 연결 되는가?
avgvstvs

5
소비자 응용 프로그램은 사용자가 레지스트리를 가지고 가서 바이올린을 사용하도록 요구할 수 없습니다. Java가 항상 이와 같은 반 솔루션을 구현하는 이유는 무엇입니까?
El Mac

15
내 윈도우 10가 모두 키 경로가 아니라 HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Java 소프트웨어 내 설치가 HKEY_LOCAL_MACHINE \ SOFTWARE \ Java 소프트웨어로의 환경 설정을 추가 할 필요 고정, 위에서 언급 설치
gt124

2
Windows 10에서 여전히 Perfs 폴더의 올바른 위치는HKEY_LOCAL_MACHINE\Software\JavaSoft
Arthur

72

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

HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs

정확한 과정을 말씀해 주시겠습니까? 나는 주로 Mac에서 일하지만 Windows에서 프로그램을 실행할 때이 오류가 발생하며 문제를 해결하는 방법을 알고 싶습니다.
Meshulam Silk

14
우리가 판매하는 소프트웨어에서 이것을보고 있습니다. 자동 / 프로그래밍 방식의 수정 프로그램 중 하나가 있으면 더 좋습니다. 최종 사용자에게 regedit에 뛰어들라고 말하는 것은 무서운 전망입니다. Java가 Windows 8.1 (오류가 표시되는 유일한 플랫폼)에서 자동 으로이 작업을 수행 할 수있는 방법이 있습니까?
Brian Knoblauch

Windows 10에서도 오류가 발생하고이 수정 프로그램이 적용되었습니다
TriumphST

45

이것은 실제로 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를 몇 년 동안 형식 으로 배포 해 왔습니다.


이러한 심층 분석에 감사드립니다. 언급 한 Issue 8139507 에 따르면 버그는 JDK 9에서 수정되었다고합니다.
realsonic

3
@realsonic. 그것에 덧붙여서 : 오라클이 마침내이 수정을 백 포트하는 것 같습니다. 그것은됩니다 8u202에 고정 . (
2018 년

30

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

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs

9
64 비트 Windows 7에서 64 비트 JVM을 사용하는 동안이 오류가 발생했으며 Dennis와 MKorsch가 제안한 솔루션이 저에게 효과적이었습니다. Wow6432Node 솔루션은 64 비트 Windows의 32 비트 JVM 용입니다.
Scott Johnson

7

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


2
고마워, 나는 다른 사람들에게 가장 간단한 해결책, 이것을 시도해 볼 것을 제안한다 :)
Aditya T

1
가장 쉬운 대답은 맨 위에 있어야합니다 .JMeter 테스트를 실행하는이 경고가 있었지만 관리자로 jmeter.bat를 시작하면 경고가 사라졌습니다.
KB

2

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]

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


1

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

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

1

이것은 나에게 일어났다.

Java에는 레지스트리 키를 작성할 권한이 없기 때문입니다.

참조 : Java : java.util.Preferences 실패


더 정확하게는 JDK에 버그가 있기 때문입니다. 답변의 링크에서 허용되는 답변을 참조하십시오.
peterh

실제로 버그는 아닙니다. 시스템 전체 설정은 시스템 관리자에게만 허용됩니다. runas응용 프로그램을 로컬 관리자로 실행하는 데 사용 하면 HKLM 아래에 레지스트리 키가 생성됩니다. Java가 가지고 있지 않은 것은 높은 permisison을 요구하는 메커니즘입니다. 이상적으로는 실패 대신 Windows UAC를 호출했을 것입니다. 이것이 보편적으로 좋은 아이디어인지는 의문입니다.
ddimitrov 2011

0

문제는 실제로 누락 된 레지스터 키입니다. 수동으로 만들 수 있습니다

또는

프로그램을 관리자로 한 번 실행하여 자동으로 생성 할 수 있습니다 . 그러면 프로그램에 필요한 권한이 부여되고 정상적으로 실행될 때 여전히 올바르게 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.