Java: система не может выполнить указанную программу
javac -version
дает правильную версию javac
, Но, java -version
выдает ошибку как
"Система не может выполнить указанную программу"
Переменная PATH установлена правильно как "C:\Program Files\Java\jdk1.8.0_102\bin"
3 ответа
Это не вопрос программирования. Но вы должны добавить свой%JRE_HOME%\bin в переменную PATH
Эта конкретная ошибка, вероятно, связана с оценкой символической ссылки на исполняемые файлы Java.
Обычно недопустимое имя исполняемого файла (то есть имя, которое не найдено в пути) приведет к ошибке со следующим текстом:
"javax" не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.
Поскольку вы получаете другую ошибку, скорее всего, это не ваша проблема.
Когда Java установлена на ПК с Windows, установщик создает каталог (обычно с путем C:\ProgramData\Oracle\Java\javapath
и помещает в него 3 символические ссылки. Они для java.exe
, javaw.exe
, а также javaws.exe
, Это предотвращает чрезмерный загромождение вашего пути потенциально конфликтующими исполняемыми именами.
javac.exe
(и keytool и т. д.) работают, потому что вы добавили папку bin JRE/JDK в PATH. Но почему не работает java/javaw/javaws? Потому что он находит javapath
каталог выше первого (поиск PATH осуществляется слева направо). Вы можете увидеть эту проблему с помощью where
команда. Например:
C:\>where java
C:\ProgramData\Oracle\Java\javapath\java.exe
C:\Program Files (x86)\Java\jre1.8.0_31\bin\java.exe
C:\>where keytool
C:\Program Files (x86)\Java\jre1.8.0_31\bin\keytool.exe
Это было бы хорошо, за исключением того, что javapath\java.exe
символьная ссылка не работает, политика запрещает ее выполнение или неверный путь.
В административной командной строке выполните следующую команду. Результат должен быть похож на ниже
C:\>fsutil behavior query SymlinkEvaluation
Local to local symbolic links are enabled.
Local to remote symbolic links are disabled.
Remote to local symbolic links are disabled.
Remote to remote symbolic links are disabled.
Если символические ссылки "Локальный на локальный" отключены, это ваша проблема (так как эти настройки предотвращают следующие точки повторной обработки)
Вы можете включить их с помощью следующей команды:fsutil behavior set SymlinkEvaluation L2L:1
Дважды проверьте, что настройки изменились с query
субкоманда. Вам не нужно перезапускать, чтобы этот параметр вступил в силу.
Если это не решит вашу проблему, убедитесь, что место назначения символической ссылки существует. Попробуйте запустить его через Проводник; должно появиться диалоговое окно консоли, а затем закрыть его. Если это не так, простой способ подтвердить, что это правильно, это щелкнуть правой кнопкой мыши по символической ссылке и выбрать "Открыть местоположение файла". Если появляется диалоговое окно с сообщением об ошибке "Проблема с ярлыком: элемент" java.exe ", на который ссылается этот ярлык, был изменен или перемещен [...]", то путь указан неверно.
Вы можете увидеть, какой путь задан на вкладке "Ярлык" в свойствах символической ссылки. Если путь неверен, вы можете удалить символическую ссылку, а затем воссоздать ее через mklink
команда. Удалите символическую ссылку, а затем из командной строки администратора выполните следующую команду; Обязательно замените второй путь на путь вашего фактического JRE/JDK!
mklink C:\ProgramData\Oracle\Java\javapath\java.exe "C:\Program Files (x86)\Java\jre1.8.0_91\bin\java.exe"
В этот момент запустите "java" из командной строки и посмотрите, работает ли он.
Если это не так, перейдите к нужному файлу java.exe, просмотрите свойства его файла и убедитесь, что внизу нет кнопки "Разблокировать". Если есть, щелкните по нему.
Вам нужно установить переменную PATH (jre/bin/) в настройках среды. в cmd установите PATH ="C:/ProgramFiles/java/jre*/bin"