A chave de registro '…' tem o valor '1,7', mas '1,6' é obrigatório. Java 1.7 está instalado e o registro está apontando para ele

95

Minha equipe de desenvolvimento foi recentemente forçada a um ambiente de desenvolvimento remoto onde não temos acesso total aos servidores. Antes da mudança, tínhamos um JAR que estava funcionando bem em Java 1.7 x64 junto com JRE 7. Quando mudamos para o novo servidor, nosso JAR estava funcionando bem, mas então um dos administradores do servidor "atualizou" nosso Java para um mais antigo versão e desinstalou o que estávamos usando. Não me pergunte por quê, eu não sei. Reinstalei o Java 1.7 e desinstalei o 1.6 junto com os JREs.

O seguinte problema ocorre no tempo de execução, não há erros de compilação:

Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.7', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.

Executei o mesmo JAR no meu laptop sem problemas. Tanto o servidor quanto meu laptop têm JDK 1.7 e JRE 7 nas respectivas variáveis% HOME% e PATH do sistema. Até reinstalei o JRE 6 e coloquei-o posteriormente nas variáveis ​​PATH do ambiente do sistema com o mesmo resultado.

Eu também alterei o registro para olhar para 1.6 e isso resulta no seguinte, que eu pesquisei e parece ser devido a vários Javas instalados (levando de volta ao meu problema original):

Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0

Eu apreciaria qualquer insight que vocês tivessem, pois estive pesquisando vários fóruns, mas nada parece ter exatamente o meu problema. Além disso, isso aconteceu em outro servidor que estamos usando. Obrigado!

Atualização: Sem sorte em recompilar o JAR para 1.6 ou 1.7 e combinar o JDK. Além disso, por que uma versão mais recente do Java quebraria uma versão compilada mais antiga?

Bryan A
fonte

Respostas:

159

Isso acontece quando você de alguma forma confundiu o próprio java. Você está tentando executar uma VM java 6 onde encontrou um JRE 7. Ele pode mostrar esse problema mesmo se você digitar apenas na linha de comando javaou java -versionem um ambiente mal configurado. O JAR não é o problema, exceto no caso muito improvável em que o código no JAR está procurando por ele no Registro do Windows (o que provavelmente não é o seu caso).

No meu caso, eu tinha o java.exe, javaw.exee javaws.exedo Java 6 na Windows/System32pasta (não sei como ficou lá). O restante do JDK e do JRE foram encontrados no PATH interno C:\Java\jdk_1.7.0\bin. Ops!

Victor Stafusa
fonte
62
Enfrentou o mesmo problema, mas com o Java 8 após desinstalá-lo. Corrigido o problema ao excluir java.exe, javaw.exe e javaws.exe presentes no Windows / System32. Realmente estranho porque nem eu sei como foi parar lá.
C Deepak
2
Obrigado por avisar, isso ajuda. JDK 1.7 vs JDK 1.8 no meu caso.
dia
7
Para x86 Pessoas !! Originalmente, instalei o 1.8 jre alguns meses atrás e queria o 1.8 SDK. java.exe, javaw.exee javaws.exeestá armazenado em Windows/SysWOW64. Além disso, por alguma razão quando eu instalei o 1.8 do SDK instalado java.exe, javaw.exee javaws.exesob C:/ProgramData/Oracle/Java/javapath. Não sei por quê, mas eu os apaguei também e java -versionainda funciona.
Luminous
1
System32 foi a chave para mim. Eu me certifiquei de que javapath tem a versão correta e minhas variáveis ​​de ambiente estão definidas corretamente ... nada funcionou até que eu consertei o problema do System32. Tudo tem que estar na mesma página.
BK
2
excluir java.exe, javaw.exe e javaws.exe presentes em indows / System32 corrige o problema para mim. Obrigado @C Deepak
Tahir Jilani
59

Acabei de ter o erro semelhante ao instalar o java 8 (jdk e jre) em um sistema que já executa o Java 7.

Erro: chave de registro 'Software \ JavaSoft \ Java Runtime

O ambiente '\ CurrentVersion' tem o valor '1,8', mas '1,7' é obrigatório.

Erro: não foi possível encontrar java.dll Erro: Não foi possível encontrar Java SE Runtime Environment.

Meu ambiente foi configurado corretamente (Path & java_home definido corretamente), mas o problema surge da maneira como os instaladores Java anteriores ao 8 funcionavam, que costumavam copiar os três executáveis ​​(java.exe, javaw.exe & javaws.exe ) para o diretório do sistema Windows. Eles permanecem, a menos que sejam substituídos por uma nova instalação pré-8.

No entanto, o instalador do Java 8 cria links simbólicos em um novo diretório, C: \ ProgramData \ Oracle \ Java \ javapath, apontando para a localização JRE 8 real.

Isso significa que você realmente executará os 7 exes antigos, mas usará as novas 8 DLLs.

Portanto, a solução é simplesmente deletar os 3 exes Java, como acima, do diretório do sistema Windows.

Se você estiver executando o Java de 32 bits em um Windows de 64 bits, os exes estarão em Windows \ SysWOW64, caso contrário, em Windows \ System32.

Jool
fonte
Esta é uma solução de trabalho, enfrentei o mesmo problema e isso resolveu.
Sagar D
Esta é uma solução muito melhor ... pelo menos para mim. Obrigado.
cbmeeks
28

Excluí os arquivos java em windows / system32 e também removi c: \ ProgramData \ Oracle \ Java \ javapath da variável PATH, porque havia 3 links simbólicos para arquivos java 1.8.

Eu tinha JDK 1.7 na variável% JAVA_HOME% e java1.7 / bin no PATH.

PS1: Meu problema era entre Java 1.7 e Java 1.8.

PS2: Não posso adicionar isso como comentário à resposta de Victor porque não tenho pontos suficientes.

José Ignacio Centeno
fonte
3
Problema: Enfrentei os problemas 1.7 e 1.8 ao tentar usar o sencha cmd. Solução: adicionei o caminho jdk1.7 / bin na variável de ambiente% PATH% e removi os arquivos java (java.exe, javaw.exe, javaws.exe) do diretório c: / windows / system32. O problema foi resolvido :)
saurabh
3
todo o f *** do problema eram os arquivos X: \ Windows \ SysWOW64 e X: \ Windows \ System32 java * .exe .. uma vez removidos, todos voltaram a funcionar ..
thiagoh
17

No menu INICIAR, digite "regedit" para abrir o editor do Registro

Vá para "HKEY_LOCAL_MACHINE" no menu do explorador / árvore de registro do lado esquerdo

Clique em "SOFTWARE" nos registros "HKEY_LOCAL_MACHINE"

Clique em "JavaSoft" nos registros de "SOFTWARE"

Clique em "Java Runtime Environment" na lista de registros "JavaSoft" aqui, você pode ver diferentes versões do java instalado

Clique em "Java Runtime Environment" - No lado direito, você obterá 4-5 linhas. Selecione "CurrentVersion" e clique com o botão direito (selecione a opção de modificação). Altere a versão para "1.7"

Agora a magia foi completada

satender
fonte
4

Não sei se alguém ainda está seguindo este tópico, mas recentemente tive esse problema quando tentei iniciar o ActiveMQ 5.10 como um serviço do Windows.

Eu não tinha um caminho JAVA_HOME definido. Eu tinha o Java 6 e o ​​Java 7 instalados, mas a versão padrão era v7. (ou seja, se eu abrir uma janela de comando e digitar "java -version").

Aqui é onde estava a pista - "java -version" retornou "Java HotSpot (TM) 64-Bit Server VM (build 23.1-b03, modo misto)" mas eu tinha instalado o serviço Win32 ...

Acontece que, se você usar o wrapper Win32 em uma máquina de 64 bits, ele de alguma forma decide usar uma versão diferente do Java ...

Portanto, minha correção foi desinstalar a versão de 32 bits do wrapper e instalar a versão de 64 bits. aversão em minha máquina; apenas hábito, eu acho ... Mas felizmente resolvi o problema eventualmente ...

James Joyce
fonte
1
Você pode encontrar esse problema se tiver as versões de 32 e 64 bits do Java instaladas e uma atualização automática (ou no meu caso corporativa forçada) atualiza apenas 1 delas. A desinstalação de todas as instâncias do Java e reinstalação de 32 e 64 bits resolverá.
DannyMeister
0

Para meu Win7

Paradox estava sendo java.exe e javaw.exe na pasta System32. Abrindo essa pasta, não consegui vê-los, mas usando a pesquisa no menu Iniciar, recebo links para esses arquivos e os removo. A próxima pesquisa me deu links para arquivos de JAVA_HOME

Magia )

Ihar Yudziankou
fonte
-1

Mude para o diretório correto, java.exeou seja, vá para a versão necessária do JDKjava.exe

cd C:/Program Files/Java/jdk1.7.0_25/bin

Execute o a java.exepartir deste diretório, ele tem precedência sobre as configurações de registro e $ PATH.

java -jar C:/installed/selenium-server-standalone-2.53.0.jar 
Barun
fonte
-2

Resolvi esse problema desinstalando o Java 1.8

Iman Marashi
fonte
-3

O frasco foi compilado para ser 1.6 compatível. É por isso que você obtém este erro. Duas resoluções:
1) Use Java 1.6

OU

2) Recompile o frasco para ser compatível com o seu ambiente 1.7

Woot4Moo
fonte
Na verdade, eu fiz os dois, mas deixe-me recuar um pouco. O JAR está, na verdade, sendo executado por meio de uma GUI C #. O JAR em si é executado por meio da linha de comando, mas não por meio da GUI. Estou pensando que poderia ser outro JAR dentro do JAR que estou executando (relativo à execução da GUI). Poderia então ser esse o caso? Que um arquivo JAR aninhado foi compilado para 1.6?
Bryan A
Isso parece implausível. As versões Java são compatíveis com versões anteriores; o código compilado para / no JDK 6 funcionará no Java 7 sem recompilar ou modificações.
Jesper
@Jesper i pode estar confundindo isso com um problema semelhante que vejo no Eclipse com frequência.
Woot4Moo
1
@Jesper é por isso que tudo isso não faz sentido para mim. Tudo o que encontro está relacionado a uma nova versão de um JAR rodando em um Java antigo como 1.6 com 1.5 JRE. Mas esse problema parece retrógrado.
Bryan A
-3

Usando o regedit, remova as entradas correspondentes a java 7. Isso funcionará.

Oliva
fonte