Could not find or load main class — что делать
Ошибка значит: команда java не нашла скомпилированный класс с тем именем, которое ей передали.
Error: Could not find or load main class Main
Caused by: java.lang.ClassNotFoundException: MainЧто проверить
Проверяйте причины по порядку — первая встречается чаще всех. Запускаете программу в IntelliJ IDEA — сразу раздел В IntelliJ IDEA.
Имя передано с расширением
Терминал $ javac Main.java $ java MainКоманде
javaнужно имя класса, а не имя файла:java Main, а неjava Main.class. Наjava Main.classпоявится как раз эта ошибка — Java ищет класс с именемMain.class.Сокращённый запуск одной командой —
java Main.java(с Java 11): тогда расширение.javaнужно, аjavacне нужен.java Mainбез расширения запускает программу — причина была в этом.Не та папка
java Mainищет файлMain.classв текущей папке. Посмотрите, что в ней лежит, командойdirв Windows илиlsв Linux и macOS. ЕслиMain.classнет — перейдите в нужную папку черезcdили сначала скомпилируйте программу. Еслиjavacвыдал ошибки, файл.classне создаётся вовсе: прочитайте сообщения компилятора и исправьте код.Main.classлежит в текущей папке, иjava Mainзапускает программу.Большие и маленькие буквы
Класс
Mainи командаjava main— это разные имена. В Windows файл найдётся (система не различает регистр в именах файлов), но Java сообщит о несовпадении:NoClassDefFoundError: Main (wrong name: main). Пишите имя класса точно так, как в коде.Имя в команде совпадает с именем класса буква в букву, и программа запускается.
У класса есть пакет
Если первая строка файла —
package com.example;, полное имя класса —com.example.Main, а файлMain.classдолжен лежать в папкеcom/example. Удобнее всего компилировать в отдельную папку и запускать с указанием пути:Терминал $ javac -d out Main.java $ java -cp out com.example.Main-d outраскладывает классы по папкам пакетов внутриout,-cp outговоритjava, где их искать. Запускjava Mainизнутри папкиcom/exampleне сработает.java -cp out com.example.Mainзапускает программу.Задана переменная CLASSPATH
Если в системе задана переменная среды
CLASSPATH(её оставляют некоторые старые программы),javaищет классы только там, а текущую папку не смотрит. Проверка в Windows —echo %CLASSPATH%, в Linux —echo $CLASSPATH. Запустите с явным путём — точка значит «текущая папка»:Терминал $ java -cp . MainИли удалите
CLASSPATH, если он не нужен другим программам.java -cp . Mainзапускает программу — мешала переменнаяCLASSPATH.
В IntelliJ IDEA
- Запускайте программу зелёным треугольником рядом с методом
main— так среда сама создаст правильную конфигурацию запуска. - Если ошибка осталась после переименования класса или перемещения файла — пересоберите проект: Build → Rebuild Project.
- Файл должен лежать в папке исходников (обычно
src), иначе среда его не компилирует.
Похожая ошибка: нет метода main
Если класс найден, но в нём нет правильного main, сообщение другое: Main method not found in class Main. Проверьте объявление — в курсе оно везде такое: public static void main(String[] args). Частые опечатки — Main с большой буквы, string с маленькой, пропущенное static.