Ключ реестра «…» имеет значение «1,7», но требуется «1,6». Java 1.7 установлена, и реестр указывает на нее


95

Моя команда разработчиков недавно была вынуждена перейти в удаленную среду разработки, где у нас нет полного доступа к серверам. До изменения у нас был JAR, который нормально работал на Java 1.7 x64 вместе с JRE 7. Когда мы перешли на новый сервер, наш JAR работал нормально, но затем один из администраторов сервера «обновил» нашу Java до более старой. версию и удалили ту, которую мы использовали. Не спрашивайте меня, почему, я не знаю. Я переустановил Java 1.7 и удалил 1.6 вместе с JRE.

Следующая проблема возникает во время выполнения, ошибок сборки нет:

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.

Я без проблем запустил тот же JAR на своем ноутбуке. И сервер, и мой ноутбук имеют JDK 1.7 и JRE 7 в соответствующих переменных% HOME% и системном PATH. Я даже переустановил JRE 6 и поместил его позже в переменные PATH системной среды с тем же результатом.

Я также изменил реестр, чтобы посмотреть на 1.6, и это привело к следующему, которое я просмотрел, и, похоже, из-за установки нескольких Jav (что привело к моей исходной проблеме):

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

Я был бы признателен за любое понимание, которое у вас есть, поскольку я просматривал различные форумы, но, похоже, ни у кого нет именно моей проблемы. Кроме того, это произошло на другом сервере, который мы используем. Спасибо!

Обновление: не повезло с перекомпиляцией JAR до 1.6 или 1.7 и соответствием JDK. Кроме того, с какой стати новая версия Java ломает старую скомпилированную версию?

Ответы:


159

Такое бывает, когда вы как-то перепутали саму java. Вы пытаетесь запустить виртуальную машину java 6, на которой обнаружена JRE 7. Это может показать эту проблему, даже если вы вводите командную строку просто javaили java -versionв неправильно настроенной среде. JAR не является проблемой, за исключением очень маловероятного случая, когда код в JAR ищет это в реестре Windows (что, вероятно, не в вашем случае).

В моем случае, у меня был java.exe, javaw.exeи javaws.exeиз Java 6 в Windows/System32папке (не знаю , как это должно быть там). Остальные JDK и JRE находятся внутри PATH C:\Java\jdk_1.7.0\bin. Ой!


62
Столкнулся с той же проблемой, но с Java 8 после удаления. Исправлена ​​проблема путем удаления файлов java.exe, javaw.exe и javaws.exe, присутствующих в Windows / System32. Действительно странно, потому что даже я не знаю, как он туда попал.
C Deepak

2
Спасибо за уведомление, это помогает. JDK 1.7 против JDK 1.8 в моем случае.
daoway 01

7
Для людей x86 !! Первоначально я установил 1.8 jre пару месяцев назад и хотел 1.8 sdk. java.exe,, javaw.exeи javaws.exeхранится в Windows/SysWOW64. Кроме того, по какой - то причине , когда я установил 1,8 SDk он установлен java.exe, javaw.exeи javaws.exeпод C:/ProgramData/Oracle/Java/javapath. Не знаю почему, но я их тоже удалил и java -versionвсе еще работает.
Luminous

1
System32 была для меня ключевой. Я убедился, что javapath имеет правильную версию и мои переменные среды установлены правильно ... ничего не работало, пока я не исправил эту сделку с System32. Все должно быть на одной странице.
BK

2
Удаление java.exe, javaw.exe и javaws.exe, присутствующих в indows / System32, решает проблему для меня. Спасибо @C Deepak
Тахир Джилани

59

Просто была аналогичная ошибка при установке java 8 (jdk & jre) в системе, уже работающей с Java 7.

Ошибка: ключ реестра 'Software \ JavaSoft \ Java Runtime

Среда '\ CurrentVersion' имеет значение '1,8', но требуется '1,7'.

Ошибка: не удалось найти java.dll Ошибка: не удалось найти среду выполнения Java SE.

Моя среда была настроена правильно (правильно определены путь и java_home), но проблема возникает из-за того, как работали установщики Java до 8, то есть они использовали для копирования трех исполняемых файлов (java.exe, javaw.exe и javaws.exe ) в системный каталог Windows. Они остаются до тех пор, пока не будут перезаписаны новой установкой до 8.

Однако установщик Java 8 вместо этого создает символические ссылки в новом каталоге C: \ ProgramData \ Oracle \ Java \ javapath, указывая на фактическое расположение JRE 8.

Это означает, что вы фактически запустите старые 7 exes, но будете использовать новые 8 DLL.

Итак, решение состоит в том, чтобы просто удалить 3 exes Java, как указано выше, из системного каталога Windows.

Если вы используете 32-битную Java в 64-битной Windows, exes будут в Windows \ SysWOW64, в противном случае в Windows \ System32.


Это рабочее решение, я столкнулся с той же проблемой, и это решило ее.
Sagar D

Это гораздо лучшее решение ... по крайней мере, для меня. Спасибо.
cbmeeks

28

Я удалил файлы java в windows / system32, а также удалил c: \ ProgramData \ Oracle \ Java \ javapath из переменной PATH, потому что было 3 символических ссылки на файлы java 1.8.

У меня был JDK 1.7 в переменной% JAVA_HOME% и java1.7 / bin в PATH.

PS1: Моя проблема была между Java 1.7 и Java 1.8.

PS2: Я не могу добавить это в качестве комментария к ответу Виктора, потому что у меня недостаточно очков.


3
Проблема: я столкнулся с проблемой 1.7 и 1.8 при попытке использовать sencha cmd. Решение: я добавил путь jdk1.7 / bin в переменную среды% PATH% и удалил файлы java (java.exe, javaw.exe, javaws.exe) из каталога c: / windows / system32. Проблема решена :)
саураб

3
вся чертова проблема заключалась в файлах X: \ Windows \ SysWOW64 и X: \ Windows \ System32 java * .exe .. после удаления все снова
заработало

17

В меню ПУСК введите "regedit", чтобы открыть редактор реестра.

Перейдите к «HKEY_LOCAL_MACHINE» в левом проводнике реестра / древовидном меню.

Нажмите "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ" в реестрах "HKEY_LOCAL_MACHINE"

Щелкните "JavaSoft" в реестрах "ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ".

Нажмите «Java Runtime Environment» в списке реестров «JavaSoft», здесь вы можете увидеть различные версии установленной java.

Нажмите «Среда выполнения Java» - справа вы получите 4-5 строк. Выберите «CurrentVersion» и щелкните правой кнопкой мыши (выберите вариант изменения). Измените версию на «1.7»

Теперь волшебство завершено


4

Я не знаю, следит ли кто-нибудь еще за этой веткой, но недавно у меня возникла эта проблема, когда я пытался запустить ActiveMQ 5.10 как службу Windows.

У меня не задан путь JAVA_HOME. У меня были установлены Java 6 и Java 7, но версия по умолчанию была v7. (т.е. если я открыл командное окно и набрал "java -version").

Вот где разгадка - "java -version" вернула "Java HotSpot (TM) 64-Bit Server VM (сборка 23.1-b03, смешанный режим)", но мне была установлена ​​служба Win32 ...

Оказывается, если вы используете оболочку Win32 на 64-битной машине, она каким-то образом решает использовать другую версию Java ...

Поэтому я решил удалить 32-битную версию оболочки и установить 64-битную версию. отвращение к моей машине; просто привычка, наверное ... Но, к счастью, я решил проблему в конце концов ...


1
Вы можете столкнуться с этой проблемой, если у вас установлены 32-битная и 64-битная версии Java, а автоматическое (или в моем случае принудительное корпоративное) обновление обновляет только 1 из них. Удалите все экземпляры Java и переустановите как 32-, так и 64-разрядные версии.
DannyMeister

0

Для моей Win7

Парадокс заключался в том, что java.exe и javaw.exe в папке System32. Открыв эту папку, я не увидел их, но с помощью поиска в меню «Пуск» получил ссылки на эти файлы и удалил их. Следующий поиск дал мне ссылки на файлы из JAVA_HOME

магия)


-1

Перейти в каталог с правильным, java.exeт.е. перейти к требуемой версии JDKjava.exe

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

Запустите java.exeиз этого каталога, он имеет приоритет над настройками реестра и $ PATH.

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


-3

Баночка была скомпилирована в 1.6 соответствии с требованиями. Вот почему вы получаете эту ошибку. Два разрешения:
1) Используйте Java 1.6.

ИЛИ

2) Перекомпилируйте банку, чтобы она соответствовала вашей среде. 1.7


На самом деле я сделал и то, и другое, но позвольте мне немного отступить. JAR фактически запускается через графический интерфейс C #. Сам JAR запускается через командную строку, но не через графический интерфейс. Я думаю, что это может быть другой JAR в JAR, который я запускаю (относящийся к запуску графического интерфейса). Может ли это быть так? Что вложенный файл JAR был скомпилирован до версии 1.6?
Bryan A

Это звучит неправдоподобно. Версии Java обратно совместимы; код, скомпилированный для / на JDK 6, будет работать на Java 7 без перекомпиляции или изменений.
Jesper

@Jesper, я могу спутать это с аналогичной проблемой, которую я часто вижу в Eclipse.
Woot4Moo 08

1
@Jesper, поэтому для меня все это не имеет смысла. Все, что я нахожу, связано с новой версией JAR, работающей на старой Java, например 1.6 с 1.5 JRE. Но эта проблема кажется обратной.
Bryan A

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.