Я не могу скомпилировать файлы Java после обновления Windows! (PowerShell заменил командную строку.)

Я не могу скомпилировать какие-либо Java-программы после того, как PowerShell заменил командную строку в меню файлов во время обновления Windows. Я попытался использовать ту же команду SET PATH, что и в командной строке (set path = c:\"Program Files"\Java\jdk1.8.0_102\bin). Команда java работала, а javac не распознавалась.

Узнав, как получить доступ к командной строке (введите «CMD» в поле поиска в левом нижнем углу), я предположил, что все будет работать как обычно, но я ошибся. Команда javac КАЖЕТСЯ работает. Он помечал ошибки, когда я впервые пытался скомпилировать. После исправления ошибок я думал, что компилировал без ошибок. Когда я попытался запустить свою «только что скомпилированную» программу, я заметил, что мои новые изменения не отображаются! Я обнаружил, что, несмотря на то, что он компилировался, новые файлы CLASS не создавались. (Это были старые файлы CLASS, которые запускались.)

Затем мне посоветовали убедиться, что я администратор. Я сделал это с помощью PowerShell и командной строки, но это не имело никакого значения.

Пробовал переустанавливать Java - тоже ничего не изменилось.

Вот что происходит, когда я компилирую от имени администратора из командной строки:

C:\Users\penny\Java>Set Path=C:\"Program Files"\Java\jdk1.8.0_131\bin

C:\Users\penny\Java>javac FoodCount.java

C:\Users\penny\Java>java FoodCount
Error: Could not find or load main class FoodCount

Он компилируется (или кажется), но файл класса не создается. И да, файл javac.exe НАХОДИТСЯ в bin-файле:

C:\Program Files\Java\jdk1.8.0_131\bin>dir javac.exe
 Volume in drive C is Windows
 Volume Serial Number is 7040-4F22

 Directory of C:\Program Files\Java\jdk1.8.0_131\bin

07/12/2017  11:48 PM            15,904 javac.exe
               1 File(s)         15,904 bytes
               0 Dir(s)  838,527,008,768 bytes free

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

PS C:\Users\penny\Java> $env:PATH += ';c:\Program 
Files\Java\jdk1.8.0_102\bin'
PS C:\Users\penny\Java> javac FoodCount.java
javac : The term 'javac' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.
At line:1 char:1
+ javac FoodCount.java
+ ~~~~~
    + CategoryInfo          : ObjectNotFound: (javac:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS C:\Users\penny\Java>

Подводя итог, я, похоже, смог выполнить компиляцию с помощью javac.exe из командной строки, но после этого в моем каталоге не удается найти новый файл класса. Я вообще не могу заставить PowerShell распознать javac.exe.

Кто-нибудь может сказать мне, что происходит? Я думаю, должно быть что-то с разрешениями, но быть администратором, похоже, недостаточно.


person Penny    schedule 13.07.2017    source источник
comment
Прочтите о том, как задать хороший вопрос.   -  person mklement0    schedule 13.07.2017
comment
set — это псевдоним командлета Set-Variable в PowerShell, которому вы должны передать имя переменной и значение в виде отдельных аргументов (Set-Variable <name> <value>). Напротив, если вы сделаете что-то вроде set path=c:\"Program Files"\Java\jdk1.8.0_102\bin, вы получите неинициализированную переменную, буквально названную path=c:\"Program Files"\Java\jdk1.8.0_102\bin (если вы поместите пробелы вокруг =, как в настоящее время в вашем вопросе, вы получите синтаксическую ошибку).   -  person mklement0    schedule 13.07.2017
comment
Помимо того, что не рекомендуется заменять существующее значение PATH, вам нужно указать PowerShell, что вы хотите изменить переменную environment, а не переменную PowerShell, поэтому то, что вы ищете, это что-то вроде $env:PATH += ';c:\Program Files\Java\jdk1.8.0_102\bin'   -  person mklement0    schedule 13.07.2017
comment
Спасибо за ваши комментарии! Очевидно, мне нужно изучить PowerShell. (Сначала я предположил, что это просто обновленная версия старой командной строки.) Я заметил, что команда java работает без какого-либо оператора или значения PATH в обеих средах (командная строка и PowerShell). Я только что попробовал предложенный вами оператор PATH, но ничего не изменилось. Вывод ниже:   -  person Penny    schedule 13.07.2017
comment
PS C:\Users\penny\Java› $env:PATH += ';c:\Program Files\Java\jdk1.8.0_102\bin' PS C:\Users\penny\Java› javac FoodCount.java javac : Термин «javac» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку. В строке: 1 char: 1 + javac FoodCount.java + ~~~~~ + CategoryInfo: ObjectNotFound: (javac:String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException PS C:\Users\penny\Java›   -  person Penny    schedule 13.07.2017
comment
Если вы хотите восстановить Command Prompt в вашем контексте и меню win+x, см. Восстановление командной строки после обновления Creators   -  person David C. Rankin    schedule 13.07.2017
comment
Убедитесь, что javac.exe действительно находится в c:\Program Files\Java\jdk1.8.0_102\bin.   -  person Ansgar Wiechers    schedule 13.07.2017
comment
Спасибо, @DavidC.Rankin. Я немного боюсь возиться с редактором реестра, но я могу попробовать. Конечно, я бы предпочел, чтобы командная строка использовалась по умолчанию, но пока я могу получить к ней доступ, набрав CMD в поле поиска, этого достаточно. Что меня беспокоит, так это то, что даже когда я открываю командную строку от имени администратора, при компиляции не создаются файлы классов. Смотрите мой вывод ниже:   -  person Penny    schedule 13.07.2017
comment
C:\Users\penny\Java›Set Path=C:\Program Files\Java\jdk1.8.0_131\bin C:\Users\penny\Java›javac FoodCount.java C:\Users\penny\Java›java FoodCount Ошибка: не удалось найти или загрузить основной класс FoodCount   -  person Penny    schedule 13.07.2017
comment
@AnsgarWiechers, спасибо за ваш комментарий и за то, что мой пост стал лучше! javac.exe есть!   -  person Penny    schedule 13.07.2017
comment
@Penny Еще одна хорошая ссылка (я предпочитаю метод переименования): Как поместить командное окно здесь обратно в контекстное меню правой кнопки мыши Вам не нужно бояться regedit. Простым отказоустойчивым способом является резервное копирование ключа перед его изменением (просто щелкните правой кнопкой мыши ключ или ветку, удерживающую ключ) и выберите export, чтобы сохранить текущие настройки в виде файла .reg. Затем внесите изменения. Если вы хотите вернуться к настройкам по умолчанию, просто дважды щелкните сохраненный файл .reg. Простой.   -  person David C. Rankin    schedule 13.07.2017
comment
Спасибо, @DavidC.Rankin!   -  person Penny    schedule 15.07.2017


Ответы (1)


Я думаю, что Windows исправила эту «ошибку» с помощью другого автоматического обновления / исправления!

Когда я попытался скомпилировать из командной строки сегодня, это сработало! Файл класса был сохранен, и я смог его запустить. Вчера компилятор (javac.exe) похоже работал из командной строки, но новый файл класса не был создан. Я не знаю, почему сегодня он будет вести себя по-другому, если только обновление Windows не устранит проблему.

Я все еще не могу запустить javac.exe в PowerShell, но я не знаю, что я там делаю.

Если у кого-то еще есть такая проблема, мой совет - ТЕРПЕНИЕ. Если вы подождете, это может уйти!

person Penny    schedule 14.07.2017