Java Не удалось найти или загрузить основной класс (PATH и CLASSPATH уже установлены)

У меня проблемы с запуском java в командной строке. Я проверил множество других вопросов, и ни один из них не решил мою проблему.

Я использую Windoze 10 x64.

Установил на C:\Program Files\Java, у меня есть следующие файлы:

jdk1.8.0_121 и jre1.8.0_121.

Я уже установил JAVA_HOME, PATH и CLASSPATH следующим образом:

  • JAVA_HOME as C:\Program Files\Java\jdk1.8.0_121

  • PATH as %JAVA_HOME%/bin

  • CLASSPATH as %JAVA_HOME%/lib

Это текущая конфигурация системных переменных. Я перепробовал множество вариантов конфигов, но ни один из них не помог. Например, добавление в PATH %JAVA_HOME%\jre1.8.0_121\bin. Кажется, ничего не помогает.

Если я запущу java -version и javac -version, они пройдут, показывая текущую установленную версию.

Я также могу скомпилировать, например: javac HelloWorld.java успешно.

Когда я пробую java HelloWorld, я получаю Could not find or load main class HelloWorld.

Вот файл HelloWorld.java:

    public class HelloWorld{
        public static void main(String [] args){
            System.out.println("Hello World!");
        }
    }

Я потратил +2 часа, пытаясь понять это. Я уверен, что это ошибка новичка, но, честно говоря, я просто пытаюсь настроить это, чтобы начать изучать Java.

Я могу запустить Java с помощью консоли IntelliJ IDEA Community Edition, но не напрямую через CMD.

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

Если вам нужна дополнительная информация, я буду рад предоставить ее, спасибо.


РЕДАКТИРОВАТЬ: Хорошо, проблема была решена. Спасибо @azurefrog и @mirmdasif за то, что помогли мне разобраться.

Как вы можете прочитать здесьи ниже этого в комментариях azurefrog и ответе mirmdasif вам нужно добавить текущий рабочий каталог в файл CLASSPATH.

Добавьте текущий рабочий каталог в CLASSPATH, добавив . (точку) в CLASSPATH.

Таким образом, CLASSPATH вместо этого должно выглядеть так: .;%JAVA_HOME%/lib (обратите внимание на ., за которым следует точка с запятой ;.


person 10110    schedule 15.02.2017    source источник
comment
Можете ли вы поделиться своим файлом HelloWorld.java   -  person mirmdasif    schedule 15.02.2017
comment
Конечно, извините, что не добавил. Хотя синтаксис мне кажется хорошим... Добавляю прямо сейчас.   -  person 10110    schedule 15.02.2017
comment
Это весь ваш HelloWorld.java? Нет инструкции по упаковке?   -  person azurefrog    schedule 15.02.2017
comment
Я попытался добавить оператор пакета, это не сработало. Если вы предоставите мне лучший образец кода для тестирования, я буду рад попробовать его. Как я уже сказал, я пытаюсь настроить это, чтобы начать учиться и практиковаться, поэтому я практически не знаю, для чего предназначен пакетный оператор. Спасибо!   -  person 10110    schedule 15.02.2017
comment
Второе, что приходит мне в голову, это то, что у вас нет . (текущий рабочий каталог) в вашем пути к классам. Попробуйте запустить java -classpath . HelloWorld   -  person azurefrog    schedule 15.02.2017
comment
Если вы посмотрите на Как мне установить CLASSPATH, вы заметите, что он получил . добавлено к записи lib, чего я не вижу в вашей.   -  person azurefrog    schedule 15.02.2017
comment
@azurefrog java -classpath . HelloWorld Работает! Я попробую добавить . в CLASSPATH!   -  person 10110    schedule 15.02.2017
comment
Спасибо, azurefrog и mirmdasif за терпение. Я действительно ценю твою помощь. Проблема решена.   -  person 10110    schedule 15.02.2017


Ответы (3)


Проблема с вашей переменной CLASS_PATH.

Предпочтительный способ указать путь к классам — использовать параметр командной строки -cp. Это позволяет устанавливать CLASSPATH индивидуально для каждого приложения, не затрагивая другие приложения.

Значение по умолчанию для переменной ClassPath — '.', что означает, что поиск выполняется только в текущем каталоге. Если вы укажете переменную classpath, значение по умолчанию будет переопределено.

Если вы хотите установить путь к классам в качестве переменной среды, вы можете выполнить следующую команду cmd в приглашении cmd (помните точку в начале)

C:> set CLASSPATH=.;C:\Program Files\Java\jdk1.8.0_121\lib\*

Для получения дополнительной информации http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

person mirmdasif    schedule 15.02.2017
comment
Команда не решит проблему, но я вручную установил путь к классам на .;C:\Program Files\Java\jdk1.8.0_121\lib\*, и он выполняет свою работу! Спасибо ! - person 10110; 15.02.2017
comment
На самом деле я делаю то же самое только из командной строки - person mirmdasif; 15.02.2017
comment
Я пробовал это с консоли, но это не изменило бы его. Возможно, окно системной переменной было открыто, поэтому он не мог получить к нему доступ или что-то в этом роде. В очередной раз благодарим за помощь! - person 10110; 15.02.2017

Иногда это случается. Попробуйте найти java.exe в папке C:\Windows\System32, если он есть, удалите его.

Пример: папка Java Windows7 System32 java.exe

person i.merkurev    schedule 15.02.2017
comment
В System32 нет java.exe! :( Но java -classpath . HelloWorld работает. Кажется, я неправильно настроил CLASSPATH - person 10110; 15.02.2017

Просто продолжайте обновлять свои переменные среды в пути к классам всякий раз, когда вы получаете: Ошибка: не удалось найти или загрузить основной класс XXX

Затем перейдите в папку C:\Program Files\Java\jre1.8.0_181.

person user2632052    schedule 01.10.2018