Java: система не может выполнить указанную программу

javac -version дает правильную версию javac, Но, java -version выдает ошибку как

"Система не может выполнить указанную программу"

Переменная PATH установлена ​​правильно как "C:\Program Files\Java\jdk1.8.0_102\bin"

Изображение CMD

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"

Другие вопросы по тегам