Не вдалося знайти або завантажити помилку основного класу

1. Вступ

Іноді, коли ми запускаємо програму Java, ми можемо побачити “Не вдалося знайти або завантажити основний клас”. Неважко вгадати причину: JVM не вдалося знайти основний клас і дало цю помилку. Але чому це не могло?

У цьому підручнику ми обговоримо ймовірні причини відсутності пошуку основного класу. Також ми побачимо, як їх виправити.

2. Зразок програми

Ми почнемо з програми HelloWorld :

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

Тепер давайте складемо його:

$ javac HelloWorld.java

Тут компілятор створить файл .class для нашої програми. Цей файл .class буде сформовано в тому ж каталозі. Файл .class матиме те саме ім'я, що і ім'я класу, вказане в програмі Java. Цей файл .class є виконуваним.

У наступних розділах ми запустимо цей файл .class і спробуємо зрозуміти ймовірні причини помилки "Не вдалося знайти або завантажити основний клас".

3. Неправильна назва класу

Щоб запустити файл .class, створений компілятором Java, ми можемо використовувати команду нижче:

java 

Тепер запустимо нашу програму:

$ java helloworld Error: Could not find or load main class helloworld

Так, це не вдалося з помилкою "Не вдалося знайти або завантажити основний клас helloworld".

Як вже обговорювалося раніше, компілятор генерує файл .class із точно таким самим іменем, що дається класу Java у програмі . Тож у нашому випадку основний клас матиме ім’я HelloWorld , а не helloworld .

Давайте ще раз спробуємо з правильним корпусом:

$ java HelloWorld Hello world..!!!

Цього разу він пробіг успішно.

3.1. Розширення файлу

Щоб скомпілювати програму Java, ми повинні вказати ім'я файлу з його розширенням (. Java ):

$ javac HelloWorld.java

Але запустити a. файл класу , нам потрібно вказати ім’я класу, а не ім’я файлу. Отже, немає необхідності надавати розширення .class :

$ java HelloWorld.class Error: Could not find or load main class HelloWorld.class

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

$ java HelloWorld Hello world..!!!

4. Імена пакетів Java

У Java ми зберігаємо подібні класи разом у тому, що ми називаємо пакетом .

Крок Давайте HelloWorld клас в com.baeldung упаковці:

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

Тепер давайте скомпілюємо та запустимо оновлену програму HelloWorld, як і раніше:

$ java HelloWorld Error: Could not find or load main class HelloWorld

Але знову ми отримуємо помилку «Не вдалося знайти або завантажити основний клас HelloWorld»!

Спробуємо зрозуміти, що ми тут пропустили.

Щоб запустити клас Java, який знаходиться в пакеті, ми повинні вказати його повну назву . Тож у нашому випадку повне ім’я HelloWorld - це com.baeldung.HelloWorld .

Тепер, коли ми створили пакет com.baeldung , ми фактично створили структуру папок, наприклад:

com/baeldung/HelloWorld.java

Спочатку спробуємо запустити нашу програму з каталогу com / baeldung :

$ java com.baeldung.HelloWorld Error: Could not find or load main class com.baeldung.HelloWorld

Проте ми не можемо запустити нашу програму.

Тут, коли ми вказали повне ім’я класу com.baeldung.HelloWorld , Java спробувала знайти файл HelloWorld.class у com / baeldung , у каталозі, звідки ми запускали програму.

Оскільки ми вже були в com / baeldung , Java не змогла знайти та запустити програму HelloWorld .

Тепер повернімося до батьківської папки та запустіть її:

$ java com.baeldung.HelloWorld Hello world..!!!

Так, ми знову можемо сказати світові “Привіт”.

5. Недійсний шлях до класу

Перш ніж продовжувати, давайте спочатку зрозуміємо, що таке шлях до класу - це набір класів, доступний для нашої JVM, що працює зараз.

Ми використовуємо змінну classpath, щоб сказати JVM, де знайти файли .class у файловій системі.

Під час запуску програми ми можемо надати шлях до класу, використовуючи опцію -classpath . приклад:

java -classpath /my_programs/compiled_classes HelloWorld

Тут Java шукатиме файл HelloWorld.class у папці / my_programs / compiled_classes , папці, ім'я якої ми щойно склали. За замовчуванням для змінної classpath встановлено значення ".", Що означає поточний каталог.

У наведеному вище розділі ми змінили каталог для запуску нашої програми. Але що, якщо ми хочемо запустити його з іншої папки? Саме тоді нам допомагає змінна classpath.

Щоб запустити нашу програму з каталогу com / baeldung, ми можемо просто сказати, що наш шлях до класу складається з двох каталогів - по одному для кожної частини пакета:

$ java -claspath ../../ com.baeldung.HelloWorld Hello world..!!!

Тут “..” представляє батьківський каталог. У нашому випадку “../../” являє собою вершину нашої ієрархії пакетів.

6. Висновок

У цьому підручнику ми дізналися ймовірні причини помилки "Не вдалося знайти або завантажити основний клас".

Тоді, звичайно, ми також дізналися, як вирішити цю помилку.