La clé de registre «…» a la valeur «1.7», mais «1.6» est requis. Java 1.7 est installé et le registre pointe vers lui

95

Mon équipe de développement a récemment été contrainte de passer à un environnement de développement distant où nous n'avons pas un accès complet aux serveurs. Avant le changement, nous avions un JAR qui fonctionnait bien sur Java 1.7 x64 avec JRE 7. Lorsque nous sommes passés au nouveau serveur, notre JAR fonctionnait bien, mais l'un des administrateurs du serveur a "mis à jour" notre Java vers un ancien version et désinstallé celui que nous utilisions. Ne me demandez pas pourquoi, je ne sais pas. J'ai réinstallé Java 1.7 et désinstallé 1.6 avec les JRE.

Le problème suivant se produit au moment de l'exécution, il n'y a aucune erreur de construction:

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.

J'ai exécuté le même JAR sur mon ordinateur portable sans aucun problème. Le serveur et mon ordinateur portable ont tous deux JDK 1.7 et JRE 7 dans les variables% HOME% et PATH système respectifs. J'ai même réinstallé JRE 6 et l'ai placé plus tard dans les variables PATH de l'environnement système avec le même résultat.

J'ai également changé le registre pour regarder 1.6 et il en résulte ce qui suit, que j'ai recherché et il semble que plusieurs Javas soient installés (ce qui ramène à mon problème d'origine):

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

J'apprécierais toute perspicacité que vous ayez tous car j'ai regardé sur divers forums mais rien ne semble avoir exactement mon problème. De plus, cela s'est produit sur un autre serveur que nous utilisons également. Merci!

Mise à jour: pas de chance de recompiler le JAR en 1.6 ou 1.7 et de faire correspondre le JDK. Aussi, pourquoi diable une version plus récente de Java casserait-elle une ancienne version compilée?

Bryan A
la source

Réponses:

159

Cela se produit lorsque vous confondez java lui-même. Vous essayez d'exécuter une machine virtuelle java 6 où elle a trouvé un JRE 7. Cela peut montrer ce problème même si vous tapez simplement la ligne de commande javaou java -versiondans un environnement mal configuré. Le JAR n'est pas le problème, sauf dans le cas très improbable où le code du JAR recherche cela dans le registre Windows (ce qui n'est probablement pas votre cas).

Dans mon cas, j'avais le java.exe, javaw.exeet javaws.exede Java 6 dans le Windows/System32dossier (je ne sais pas comment il est arrivé là). Le reste du JDK et du JRE se trouvait dans le PATH à l'intérieur C:\Java\jdk_1.7.0\bin. Oups!

Victor Stafusa
la source
62
Face au même problème mais avec Java 8 après la désinstallation. Correction d'un problème en supprimant java.exe, javaw.exe et javaws.exe présents dans Windows / System32. Vraiment étrange car même je ne sais pas comment cela est arrivé.
C Deepak
2
Merci pour l'avis, cela aide. JDK 1.7 vs JDK 1.8 dans mon cas.
daoway
7
Pour les personnes x86 !! J'ai initialement installé le 1.8 jre il y a quelques mois et je voulais 1.8 sdk. java.exe,, javaw.exeet javaws.exeest stocké sous Windows/SysWOW64. En outre , pour une raison lorsque j'ai installé le 1.8 sdk installé java.exe, javaw.exeet javaws.exesous C:/ProgramData/Oracle/Java/javapath. Je ne sais pas pourquoi, mais je les ai également supprimés et java -versionfonctionne toujours.
Lumineux
1
System32 était la clé pour moi. Je me suis assuré que javapath a la bonne version et que mes variables d'environnement sont correctement définies ... rien n'a fonctionné jusqu'à ce que je corrige cette affaire System32. Tout doit être sur la même longueur d'onde.
BK
2
la suppression de java.exe, javaw.exe et javaws.exe présents dans indows / System32 résout le problème pour moi. Merci @C Deepak
Tahir Jilani
59

J'ai juste eu l'erreur similaire lors de l'installation de java 8 (jdk et jre) sur un système exécutant déjà Java 7.

Erreur: clé de registre 'Software \ JavaSoft \ Java Runtime

L'environnement '\ CurrentVersion' a la valeur '1.8', mais '1.7' est requis.

Erreur: impossible de trouver java.dll Erreur: Impossible de trouver l'environnement d'exécution Java SE.

Mon environnement a été configuré correctement (Path & java_home correctement définis), mais le problème vient de la façon dont les installateurs Java antérieurs à 8 fonctionnaient, c'est-à-dire qu'ils copiaient les trois exécutables (java.exe, javaw.exe & javaws.exe ) dans le répertoire système Windows. Celles-ci restent à moins d'être écrasées par une nouvelle installation antérieure à 8.

Cependant, le programme d'installation de Java 8 crée à la place des liens symboliques dans un nouveau répertoire, C: \ ProgramData \ Oracle \ Java \ javapath, pointant vers l'emplacement réel de JRE 8.

Cela signifie que vous exécuterez les 7 anciens ex mais que vous utiliserez les 8 nouvelles DLL.

Donc, la solution est simplement de supprimer les 3 ex Java, comme ci-dessus, du répertoire système de Windows.

Si vous exécutez Java 32 bits sur un Windows 64 bits, les ex seraient dans Windows \ SysWOW64, sinon dans Windows \ System32.

Jool
la source
C'est une solution de travail, j'ai fait face au même problème et cela l'a résolu.
Sagar D
C'est une bien meilleure solution ... du moins pour moi. Merci.
cbmeeks
28

J'ai supprimé les fichiers java dans windows / system32 et j'ai également supprimé c: \ ProgramData \ Oracle \ Java \ javapath de la variable PATH, car il y avait 3 liens symboliques vers les fichiers java 1.8.

J'avais JDK 1.7 dans la variable% JAVA_HOME% et java1.7 / bin dans le PATH.

PS1: Mon problème était entre Java 1.7 et Java 1.8.

PS2: Je ne peux pas ajouter cela comme commentaire à la réponse de Victor car je n'ai pas assez de points.

José Ignacio Centeno
la source
3
Problème: J'ai rencontré un problème 1.7 et 1.8 en essayant d'utiliser sencha cmd. Solution: J'ai ajouté le chemin jdk1.7 / bin dans la variable d'environnement% PATH% et j'ai supprimé les fichiers java (java.exe, javaw.exe, javaws.exe) du répertoire c: / windows / system32. Le problème a été résolu :)
saurabh
3
tout le problème était les fichiers X: \ Windows \ SysWOW64 et X: \ Windows \ System32 java * .exe .. une fois supprimés, tout a recommencé à fonctionner ..
thiagoh
17

Dans le menu START, tapez "regedit" pour ouvrir l'éditeur de registre

Accédez à "HKEY_LOCAL_MACHINE" dans le menu de l'explorateur / arborescence de registre de gauche

Cliquez sur "SOFTWARE" dans les registres "HKEY_LOCAL_MACHINE"

Cliquez sur "JavaSoft" dans les registres "SOFTWARE"

Cliquez sur "Java Runtime Environment" dans la liste "JavaSoft" des registres. Ici, vous pouvez voir différentes versions de Java installé.

Cliquez sur "Java Runtime Environment" - Sur le côté droit, vous obtiendrez 4 à 5 lignes. Veuillez sélectionner "CurrentVersion" et faites un clic droit (sélectionnez l'option de modification) Changez la version en "1.7"

Maintenant, la magie est terminée

satender
la source
4

Je ne sais pas si quelqu'un suit toujours ce fil, mais j'ai récemment eu ce problème lorsque j'ai essayé de lancer ActiveMQ 5.10 en tant que service Windows.

Je n'avais pas de chemin d'accès JAVA_HOME défini. J'ai installé Java 6 et Java 7, mais la version par défaut était la v7. (c'est-à-dire si j'ai ouvert une fenêtre de commande et tapez "java -version").

C'est là que se trouvait l'indice - "java -version" a renvoyé "Java HotSpot (TM) 64-Bit Server VM (build 23.1-b03, mode mixte)" mais j'avais installé le service Win32 ...

Il s'avère que si vous utilisez le wrapper Win32 sur une machine 64 bits, il décide en quelque sorte d'utiliser une version différente de Java ...

Ma solution consistait donc à désinstaller la version 32 bits du wrapper et à installer la version 64 bits. aversion sur ma machine; juste une habitude je suppose ... Mais heureusement, j'ai finalement résolu le problème ...

James Joyce
la source
1
Vous pouvez rencontrer ce problème si les versions 32 et 64 bits de Java sont installées et qu'une mise à jour automatique (ou dans mon cas forcée d'entreprise) ne met à jour qu'une seule d'entre elles. La désinstallation de toutes les instances de Java et la réinstallation de 32 et 64 bits résoudront.
DannyMeister
0

Pour mon Win7

Paradox était java.exe et javaw.exe dans le dossier System32. En ouvrant ce dossier, je ne pouvais pas les voir, mais en utilisant la recherche dans le menu Démarrer, j'obtiens des liens vers ces fichiers, je les ai supprimés. La recherche suivante m'a donné des liens vers des fichiers de JAVA_HOME

la magie )

Ihar Yudziankou
la source
-1

Passer au répertoire avec correct, java.exec'est-à-dire aller à la version JDK requisejava.exe

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

Exécutez le à java.exepartir de ce répertoire, il a la priorité sur les paramètres de registre et $ PATH.

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

J'ai résolu ce problème en désinstallant Java 1.8

Iman Marashi
la source
-3

Le pot a été compilé pour être 1.6 conforme. C'est pourquoi vous obtenez cette erreur. Deux résolutions:
1) Utilisez Java 1.6

OU

2) Recompilez le fichier JAR pour qu'il soit conforme à votre environnement 1.7

Woot4Moo
la source
J'ai fait les deux, mais permettez-moi de revenir un peu en arrière. Le JAR est en fait exécuté via une interface graphique C #. Le JAR lui-même s'exécute via la ligne de commande, mais pas via l'interface graphique. Je pense que cela pourrait être un autre JAR dans le JAR que je suis en cours d'exécution (concernant l'exécution de l'interface graphique). Serait-ce alors le cas? Qu'un fichier JAR imbriqué a été compilé en 1.6?
Bryan A
Cela semble invraisemblable. Les versions Java sont rétrocompatibles; le code compilé pour / sur JDK 6 fonctionnera sur Java 7 sans recompilation ni modifications.
Jesper
@Jesper je peux confondre cela avec un problème similaire que je vois souvent dans Eclipse.
Woot4Moo
1
@Jesper, c'est pourquoi tout cela n'a pas de sens pour moi. Tout ce que je trouve est lié à une nouvelle version d'un JAR fonctionnant sur un ancien Java comme 1.6 avec un JRE 1.5. Mais ce problème semble à l'envers.
Bryan A
-3

En utilisant regedit, supprimez les entrées correspondant à java 7. Cela fonctionnera.

olive
la source