Ключ реестра "..." имеет значение "1,7", но требуется "1,6". Java 1.7 установлена и на нее указывает реестр
Моя команда разработчиков недавно была вынуждена перейти в удаленную среду разработки, где у нас нет полного доступа к серверам. До изменения у нас был 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, и это приводит к следующему, который я посмотрел, и это, кажется, из-за установки нескольких Javas (возвращаясь к моей первоначальной проблеме):
Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0
Я был бы признателен за любые идеи, которые у вас есть, поскольку я просматривал различные форумы, но, похоже, ни в чем не было моей проблемы. Кроме того, это произошло на другом сервере, который мы используем. Спасибо!
Обновление: не повезло с перекомпиляцией JAR до 1.6 или 1.7 и соответствием JDK. Кроме того, почему в мире более новая версия Java ломает старую скомпилированную версию?
10 ответов
Это происходит, когда вы как-то перепутали саму 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
, К сожалению!
Просто была похожая ошибка при установке 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 exe, но будете использовать новые 8 DLL.
Таким образом, решение состоит в том, чтобы просто удалить 3 exe Java, как указано выше, из системного каталога Windows.
Если вы работаете с 32-битной Java на 64-битной Windows, exes будет в Windows\SysWOW64, в противном случае в Windows\System32.
Я удалил 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: я не могу добавить это как комментарий к ответу Виктора, потому что у меня недостаточно очков.
В меню "ПУСК" введите "regedit", чтобы открыть редактор реестра.
Перейдите к "HKEY_LOCAL_MACHINE" в левом меню просмотра / дерева реестра.
Нажмите "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ" в реестрах "HKEY_LOCAL_MACHINE"
Нажмите "JavaSoft" в реестре "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ".
Нажмите "Java Runtime Environment" в списке "JavaSoft" реестров, здесь вы можете увидеть различные версии установленного Java
Нажмите "Java Runtime Environment"- с правой стороны вы получите 4-5 строк. Пожалуйста, выберите "CurrentVersion" и щелкните правой кнопкой мыши (выберите вариант "Изменить"). Измените версию на "1.7"
Теперь магия завершена
Я не знаю, следит ли кто-нибудь за этой веткой, но у меня недавно была эта проблема, когда я пытался запустить ActiveMQ 5.10 в качестве службы Windows.
У меня не было пути JAVA_HOME. У меня была установлена Java 6 и Java 7, но версией по умолчанию была v7. (т.е. если я открыл командное окно и набрал "java -version").
Вот где ключ к разгадке - "java -version" вернул "Java HotSpot(TM) 64-битная виртуальная машина сервера (сборка 23.1-b03, смешанный режим)", но мне была установлена служба Win32...
Оказывается, что если вы используете оболочку Win32 на 64-битной машине, она почему-то решит использовать другую версию Java...
Таким образом, я решил удалить 32-разрядную версию оболочки и установить 64-разрядную версию. отвращение к моей машине; просто привычка, я думаю... Но, к счастью, я решил проблему в конце концов...
Для моей Win7
Парадокс был в том, чтобы быть java.exe и javaw.exe в папке System32. Открывая эту папку, я не мог их видеть, но используя поиск в меню "Пуск", я получаю ссылки на эти файлы, удаляю их. Следующий searsh дал мне ссылки на файлы из JAVA_HOME
магия)
Перейдите в каталог с правильным java.exe
т.е. перейдите на нужную версию JDK java.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
Фляга была составлена, чтобы быть 1.6
совместимый. Вот почему вы получаете эту ошибку. Два разрешения:
1) Используйте Java 1.6
ИЛИ ЖЕ
2) Перекомпилируйте банку, чтобы соответствовать вашей среде 1.7
Используя regedit, удалите записи, соответствующие java 7. Это будет работать.