Нет файла java exe

«Системе не удается найти файл C:\ProgramData\Oracle\Java\javapath\java.exe»

Я использую JDK 8u25 в Windows 8, и у меня возникла проблема с установкой Java. Я могу нормально запустить javac , но запуск java выдает следующее сообщение об ошибке:

The system cannot find the file C:\ProgramData\Oracle\Java\javapath\java.exe 

Я думаю, что проблема связана с моими переменными среды.

Важными переменными, как я их установил, являются:

  • JAVA_HOME – C:\Program Files\Java\jdk1.8.0_25
  • CLASSPATH – .;%JAVA_HOME%\lib
  • PATH – ;%JAVA_HOME%\bin

И их расширения, если смотреть с помощью set в cmd, таковы:

  • JAVA_HOME – C:\Program Files\Java\jdk1.8.0_25
  • CLASSPATH – .;C:\Program Files\Java\jdk1.8.0_25\lib;%CLASSPATH%;
  • PATH – C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Java\jdk1.6.0_45\bin;;C:\Program Files\Java\jdk1.8.0_25\bin

Полный вывод set можно просмотреть здесь.

Проверьте эту ссылку, чтобы узнать, как установить переменные среды. stackoverflow.com/q/1672281/4083590

То, что я сделал, похоже на пост по ссылке. Мне не нужна \lib в конце пути к классам? Пробовал и с ним и без. Я все еще получал сообщение об ошибке, когда пытался запустить файл класса.

На вашем скриншоте вместо \ . Почему? Не могу опознать персонажа. Вероятно, не стоит раскрывать переменные среды. Вы должны показывать только релевантные

19 ответов

У меня похожая проблема, над решением которой я сейчас работаю. Я не могу сказать, что это решит вашу ошибку, так как могут быть проблемы с другим программным обеспечением (как в моем случае с Eclipse Luna).

Java использует путь, указанный в вашей переменной PATH, то есть

 C:\ProgramData\Oracle\Java\javapath 

Перейдите в эту папку (ProgramData скрыта, поэтому при необходимости отобразите ее) и щелкните правой кнопкой мыши символическую ссылку java.exe. В поле «Цель» вы увидите, где он ищет java.exe. Это может указывать на файл java.exe из вашей предыдущей установки jdk1.6.0_45. Либо вставьте сюда новые ярлыки, либо измените параметр PATH, как уже упоминалось другими.

Я обнаружил, что установщик Java не меняет javapath и не обновляет системный путь, по крайней мере, при переходе с 1.8 на 1.7. В моем случае изменение ярлыков привело только к проблеме с Eclipse при запуске.

РЕДАКТИРОВАТЬ:—— После игры с ярлыками папок javapath оказывается, что вам нужны символические ссылки, по крайней мере, для Eclipse. См. Windows, как создать символическую ссылку на каталог.

Вам не нужен переключатель /d для символической ссылки на файл,

 mklink java.exe "C:\Program Files\Java\jdk1.8.0_20\bin\java.exe" mklink javaw.exe "C:\Program Files\Java\jdk1.8.0_20\bin\javaw.exe" mklink javaws.exe "C:\Program Files\Java\jdk1.8.0_20\bin\javaws.exe" 

Теперь это работает для меня.

Похоже, он не работает в Windows 7 — из-за недавнего изменения в том, как он обрабатывает символические ссылки, его графический интерфейс отображает ошибку, говорящую о том, что он не может найти «java[w/ws].exe» при использовании символических ссылок. Безопаснее просто создать соединение каталогов: rmdir /s /q %ProgramData%\Oracle\Java\javapath & mlink /d %ProgramData%\Oracle\Java\javapath %ProgramFiles%\Java\jre1.8.0_60\bin

Перед запуском этих mklink обязательно cd C:\ProgramData\Oracle\Java\javapath и del java*.exe , иначе вы создадите новые символические ссылки в текущем каталоге cmd.

Возможно, вам придется запустить командную строку от имени администратора, иначе вы можете столкнуться с проблемами с разрешениями (как у Игоря выше).

Почему Oracle так плохо указал на java, мне непонятно. Мы решили эту проблему, создав новую ссылку на JDK

mklink /d C:\ProgramData\Oracle\Java\javapath "C:\Program Files\Java\jdk1.8.0_40\bin\" 

То же самое будет работать для JRE, если это все, что требуется.

Это заменяет старые символические ссылки в C:\ProgramData\Oracle\Java\javapath (если они существовали ранее)

Это работает для java, но не для javac: не удается найти или загрузить основной класс com.sun.tools.javac.Main

Why Oracle did such a poor way to point to java is beyond me Я предполагаю, что причина была в том, что когда у вас есть относительно постоянная env var (всегда указывающая на одно место — папку fe javapath ), вы можете динамически менять пути, на лету (изменение ссылки делает не требует перезапуска оболочки). В то время как, если вы измените env var (например, PATH), вам придется перезапустить оболочку, чтобы перезагрузить и применить новые значения ENVVAR. Конечно, я не сторонник Oracle, и, конечно, это всего лишь мое предложение.

C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Java\jdk1.8.0_92\bin;
C:\ProgramData\Oracle\Java\javapath; 

И это решило проблему для меня. java -version теперь предоставляет подробную информацию о версии Java и т. д.

Это решит все проблемы, связанные с Java и переменными среды:

  1. Перейдите в диалоговое окно переменных среды Windows.
  2. В разделе Системные переменные выберите переменную с именем Путь. Нажмите Изменить. .
  3. Удалите запись, которая выглядит так:
C:\ProgramData\Oracle\Java\javapath 

Обновление переменной среды PATH

Если вы не задаете переменную PATH, вам необходимо указывать полный путь к исполняемому файлу при каждом его запуске, например:

C:\> "C:\Program Files\Java\jdk1.8.0\bin\javac" MyClass.java 

Полезно установить переменную PATH на постоянной основе, чтобы она сохранялась после перезагрузки.
Чтобы установить переменную PATH на постоянной основе, добавьте полный путь к каталогу jdk1.8.0\bin в переменную PATH. Обычно этот полный путь выглядит примерно так
C:\Program Files\Java\jdk1.8.0\bin .
Установите переменную PATH следующим образом в Microsoft Windows:

  • Нажмите Пуск, затем Панель управления, затем Система.
  • Нажмите «Дополнительно», затем «Переменные среды».
  • Добавьте расположение папки bin установки JDK в переменную PATH в системных переменных.
    Следующее является типичным значением переменной PATH: C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Java\jdk1.8.0\bin

Новый путь вступает в силу в каждом новом командном окне, которое вы открываете после установки переменной PATH.

Источник

«Системе не удается найти файл C: \ ProgramData \ Oracle \ Java \ javapath \ java.exe»

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

изображение связанных переменных среды, которые я ввел: Я мог бы создать файл класса, но когда я попытался запустить файл класса, произошла ошибка и он сказал следующее:

Я не могу понять, в чем проблема. Является ли это мои переменные, которые загрязнены (и если да, то почему и как я должен их исправить), или если это что-то другое.

проверьте эту ссылку, чтобы узнать, как установить переменные среды. stackoverflow.com/q/1672281/4083590

@johny То, что я сделал, похоже на пост по ссылке. Разве мне не нужен \ lib в конце пути к классам? Я попробовал это с и без. Я все еще получал сообщение об ошибке, когда пытался запустить файл класса.

Ваш скриншот имеет странный символ вместо \. Зачем? Я не могу определить характер. Вероятно, не стоит раскрывать переменные среды. Вы должны показывать только соответствующие

14 ответов

У меня есть аналогичная проблема, над которой я сейчас работаю. Я не могу сказать, что это решит вашу ошибку, поскольку могут возникнуть проблемы с другим программным обеспечением (это мой случай с Eclipse Luna).

Java использует путь, указанный в вашей переменной PATH, которая,

 C:\ProgramData\Oracle\Java\javapath 

Перейдите в эту папку (ProgramData скрыта, поэтому, если необходимо), щелкните правой кнопкой мыши по символической ссылке java.exe. Вы увидите в поле Цель, где он ищет java.exe. Он может указывать на файл java.exe из вашей предыдущей установки jdk1.6.0_45. Либо вставьте новые ярлыки здесь, либо измените настройку PATH, как упомянули другие.

Я обнаружил, что установщик Java не изменяет javapath или не обновляет системный путь, по крайней мере, при переходе от 1,8 до 1,7. В моем случае изменение ярлыков только привело к проблеме с Eclipse при запуске.

EDIT: —— После игры с ярлыками в папке javapath оказывается, что вам нужны символические ссылки, по крайней мере для Eclipse. См. Windows, как создать символическую ссылку для каталога.

Вам не нужен переключатель /d для символической ссылки файла,

 mklink java.exe "C:\Program Files\Java\jdk1.8.0_20\bin\java.exe" mklink javaw.exe "C:\Program Files\Java\jdk1.8.0_20\bin\javaw.exe" mklink javaws.exe "C:\Program Files\Java\jdk1.8.0_20\bin\javaws.exe" 

Теперь это работает для меня.

Источник

Как найти, где установлен javaw.exe?

Итак, для проекта, над которым я работаю, мне нужно выяснить, где находится javaw.exe на пользовательской машине. Как это сделать? Предполагая, что пользователь находится на компьютере под управлением Windows Метод, который я использовал, ограничен только английскими версиями Windows.
Я искал, где установлена ​​ОС, найдите каталог Program Files , найдите каталог Java , jdk , bin , затем javaw.exe . Я знаю, что это не будет работать на неанглийских версиях Windows. Что такое независимый от человека язык?

Существуют специфичные для ОС API-интерфейсы поиска для поиска файлов и получения версии из исполняемого файла. В Windows вы можете использовать API поиска Windows для поиска и :: GetFileVersionInfo (. ), чтобы получить версию. Обратите внимание, что поиск может занять некоторое время. Альтернативой является отправка собственной JVM, что упрощает поиск по относительному пути.

@LittleChild: Обратите внимание, что обычно вы не найдете JDK, установленный на ПК обычного пользователя. Ваши шансы лучше искать установку JRE.

5 ответов

Для полноты позвольте мне упомянуть, что есть некоторые места (на ПК с Windows) для поиска javaw.exe в случае, если он не найден в пути: (Рекомендация Still Reimeus должна быть вашей первой попыткой.)

1.
Java обычно хранит его местоположение в реестре под следующим ключом:
HKLM\Software\JavaSoft\Java Runtime Environement\\JavaHome

2.
Более новые версии JRE/JDK, похоже, также помещают копию javaw.exe в «C:\Windows\System32», поэтому вам тоже может понадобиться проверить (хотя есть шансы, если она есть, она будет найдена в путь также).

3.
Конечно, есть «обычные» места установки:

  • ‘C:\Program Files\Java\jre *\bin’
  • ‘C:\Program Files\Java\jdk *\bin’
  • ‘C:\Program Files (x86)\Java\jre *\bin’
  • ‘C:\Program Files (x86)\Java\jdk *\bin’
[Обратите внимание, что для более старых версий Windows (XP, Vista (?)) это поможет только на английских версиях ОС. К счастью, в более поздней версии Windows «Program Files» укажет на каталог независимо от его «отображаемого имени» (которое зависит от языка).]

Некоторое время назад я написал этот фрагмент кода для проверки javaw.exe в вышеупомянутых местах. Может быть, кто-то сочтет это полезным:

static protected String findJavaw() < Path pathToJavaw = null; Path temp; /* Check in Registry: HKLM\Software\JavaSoft\Java Runtime Environement\\JavaHome */ String keyNode = "HKLM\\Software\\JavaSoft\\Java Runtime Environment"; List output = new ArrayList<>(); executeCommand(new String[] , output); Pattern pattern = Pattern.compile("\\s*CurrentVersion\\s+\\S+\\s+(.*)$"); for (String line : output) < Matcher matcher = pattern.matcher(line); if (matcher.find()) < keyNode += "\\" + matcher.group(1); Listoutput2 = new ArrayList<>(); executeCommand( new String[] , output2); Pattern pattern2 = Pattern.compile("\\s*JavaHome\\s+\\S+\\s+(.*)$"); for (String line2 : output2) < Matcher matcher2 = pattern2.matcher(line2); if (matcher2.find()) < pathToJavaw = Paths.get(matcher2.group(1), "bin", "javaw.exe"); break; >> break; > > try < if (Files.exists(pathToJavaw)) < return pathToJavaw.toString(); >> catch (Exception ignored) <> /* Check in 'C:\Windows\System32' */ pathToJavaw = Paths.get("C:\\Windows\\System32\\javaw.exe"); try < if (Files.exists(pathToJavaw)) < return pathToJavaw.toString(); >> catch (Exception ignored) <> /* Check in 'C:\Program Files\Java\jre*' */ pathToJavaw = null; temp = Paths.get("C:\\Program Files\\Java"); if (Files.exists(temp)) < try (DirectoryStreamdirStream = Files.newDirectoryStream(temp, "jre*")) < for (Path path : dirStream) < temp = Paths.get(path.toString(), "bin", "javaw.exe"); if (Files.exists(temp)) < pathToJavaw = temp; // Don't "break", in order to find the latest JRE version >> if (pathToJavaw != null) < return pathToJavaw.toString(); >> catch (Exception ignored) <> > /* Check in 'C:\Program Files (x86)\Java\jre*' */ pathToJavaw = null; temp = Paths.get("C:\\Program Files (x86)\\Java"); if (Files.exists(temp)) < try (DirectoryStreamdirStream = Files.newDirectoryStream(temp, "jre*")) < for (Path path : dirStream) < temp = Paths.get(path.toString(), "bin", "javaw.exe"); if (Files.exists(temp)) < pathToJavaw = temp; // Don't "break", in order to find the latest JRE version >> if (pathToJavaw != null) < return pathToJavaw.toString(); >> catch (Exception ignored) <> > /* Check in 'C:\Program Files\Java\jdk*' */ pathToJavaw = null; temp = Paths.get("C:\\Program Files\\Java"); if (Files.exists(temp)) < try (DirectoryStreamdirStream = Files.newDirectoryStream(temp, "jdk*")) < for (Path path : dirStream) < temp = Paths.get(path.toString(), "jre", "bin", "javaw.exe"); if (Files.exists(temp)) < pathToJavaw = temp; // Don't "break", in order to find the latest JDK version >> if (pathToJavaw != null) < return pathToJavaw.toString(); >> catch (Exception ignored) <> > /* Check in 'C:\Program Files (x86)\Java\jdk*' */ pathToJavaw = null; temp = Paths.get("C:\\Program Files (x86)\\Java"); if (Files.exists(temp)) < try (DirectoryStreamdirStream = Files.newDirectoryStream(temp, "jdk*")) < for (Path path : dirStream) < temp = Paths.get(path.toString(), "jre", "bin", "javaw.exe"); if (Files.exists(temp)) < pathToJavaw = temp; // Don't "break", in order to find the latest JDK version >> if (pathToJavaw != null) < return pathToJavaw.toString(); >> catch (Exception ignored) <> > return "javaw.exe"; // Let just hope it is in the path :) > 

Источник

Читайте также:  Javascript while with timeout
Оцените статью