Tentei abrir o Groovy Shell ( groovysh
) no Windows 8 e obtive a seguinte saída:
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.
Depois de imprimir a mensagem acima, o shell iniciou como esperado.
windows
groovy
groovyshell
Dennis Traub
fonte
fonte
Respostas:
A resposta de Dennis está correta. No entanto, gostaria de explicar a solução de uma maneira um pouco mais detalhada (para usuário do Windows):
regedit
o campo de pesquisa.HKEY_LOCAL_MACHINE\Software\JavaSoft
(agora o Windows 10 parece ter isso aquiHKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
:)New
->Key
Prefs
e tudo deve funcionar.Como alternativa, salve e execute um
*.reg
arquivo com o seguinte conteúdo:fonte
HKEY_LOCAL_MACHINE\Software\JavaSoft
Consegui resolver o problema criando manualmente a seguinte chave do Registro:
fonte
Este é realmente um bug do JDK. Foi relatado várias vezes ao longo dos anos, mas somente em 8139507 foi finalmente levado a sério pela Oracle.
O problema estava no código fonte do JDK para
WindowsPreferences.java
. Nesta classe, ambos os nósuserRoot
esystemRoot
foram declarados estáticos como em:Isso significa que, na primeira vez em que a classe for referenciada, ambas as variáveis estáticas seriam iniciadas e, com isso, a Chave do Registro para
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
(= árvore do sistema) tentará ser criada se ela ainda não existir.Portanto, mesmo que o usuário tome todas as precauções em seu próprio código e nunca toque nem faça referência à árvore do sistema, a JVM ainda tentará instanciar
systemRoot
, causando o aviso. É um bug sutil interessante.Há uma correção confirmada na fonte JDK em junho de 2016 e faz parte do Java9 em diante. Há também um backport para Java8 que está no u202.
O que você vê é realmente um aviso do registrador interno do JDK. Não é uma exceção. Acredito que o aviso possa ser ignorado com segurança .... a menos que o código do usuário esteja realmente querendo as preferências do sistema, mas esse raramente é o caso.
Informações sobre bônus
O bug não se revelou nas versões anteriores ao Java 1.7.21, porque até então o instalador do JRE criaria a chave do Registro
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
para você e isso ocultaria efetivamente o bug. Por outro lado, você nunca foi realmente solicitado a executar um instalador para ter um JRE em sua máquina, ou pelo menos essa não foi a intenção da Sun / Oracle. Como você deve saber, a Oracle distribui o JRE para Windows em.tar.gz
formato há muitos anos.fonte
Se alguém estiver tentando resolver isso em uma versão de 64 bits do Windows, talvez seja necessário criar a seguinte chave:
fonte
O problema é que o console simples não pode editar o registro. Não há necessidade de editar o registro manualmente, basta iniciar o
groovysh
uma vez com privilégios administrativos. Todos os lançamentos subsequentes funcionam sem erros.fonte
Teve um problema semelhante ao iniciar o apache jmeter no Windows 8 de 64 bits:
Solução Dennis Traub usada com sucesso, com explicações de Mkorsch. Ou você pode criar um arquivo com a extensão "reg" e escrever o seguinte:
... então execute.
fonte
Eu estava recebendo a seguinte mensagem:
e se foi depois de criar uma dessas chaves de registro, a minha é de 64 bits, então tentei apenas isso.
fonte
Isso aconteceu comigo.
Aparentemente, é porque o Java não tem permissão para criar chaves do registro.
Consulte: Java: java.util.Preferences falhando
fonte
runas
para executar seu aplicativo como usuário administrador local e ele criará com prazer a chave do registro em HKLM. O que o Java não possui é um mecanismo para solicitar permissões elevadas (ou seja, idealmente, ele invocaria o Windows UAC em vez de falhar - é questionável se isso é universalmente uma boa idéia).O problema é realmente a chave de registro que está faltando. Pode ser criado manualmente
OU
Ele pode ser criado automaticamente , executando o programa como administrador uma vez. Isso dará ao programa as permissões necessárias e, quando será executado normalmente, continuará funcionando corretamente.
fonte