Poprawka: nie można znaleźć lub załadować klasy głównej

Błąd „ Nie można znaleźć lub załadować klasy głównej ” występuje podczas używania polecenia java w wierszu poleceń w celu uruchomienia programu Java przez określenie nazwy klasy w terminalu. Powodem tego jest głównie błąd programistyczny użytkownika podczas deklarowania klasy.

Nie można znaleźć lub załadować klasy głównej w wierszu poleceń Java

Jak wspomniano wcześniej, ten błąd w większości nie jest związany z systemem i użytkownik popełnia błąd w kilku scenariuszach, jak pokazano poniżej. Zanim przejdziemy dalej, zakładamy, że masz podstawową wiedzę o języku programowania Java i o tym, jak on działa.

Co powoduje błąd „Nie można znaleźć lub załadować klasy głównej” w Javie?

Komunikat „Nie można znaleźć ani załadować klasy głównej” oznacza, że ​​pierwszy krok mechanizmu Java podczas pobierania klasy do wykonania nie powiódł się. Komenda java nie była w stanie zlokalizować klasy w poprawnym katalogu.

W niektórych przypadkach trzeba dodać poprawną ścieżkę do pliku i wskazać terminalowi Java odpowiednią lokalizację. Ponieważ wykonujesz polecenie z terminala wiersza poleceń, komputer nie wie, gdzie znajduje się klasa ani gdzie się znajduje. W ukierunkowanych IDE nie stanowi to problemu, ponieważ IDE utrzymuje wskaźnik wskazujący na bieżący katalog roboczy.

Co to jest składnia „java”?

Zanim zaczniemy rozwiązywać problemy, dlaczego terminal zwraca nam błąd podczas próby wykonania, najpierw musimy przyjrzeć się składni polecenia. Jeśli nie używasz poprawnej składni, nieuchronnie napotkasz ten błąd.

Normalna składnia polecenia wygląda mniej więcej tak:

 java [...] [...]

Oto opcja wiersza poleceń, w pełni kwalifikowana nazwa klasy Java i argument wiersza poleceń, który jest przekazywany do aplikacji, gdy cały pakiet jest kompilowany.

Przykład prawidłowego polecenia:

java -Xmx100m com.acme.example.ListAppuals kevin arrows bart

Powyższe polecenie spowoduje, że polecenie java wykona następujące operacje:

  • Wyszuka skompilowaną wersję klasy „ com.acme.example.ListAppuals ”.
  • Po wyszukaniu załaduje klasę.
  • Następnie, po załadowaniu klasy, klasa będzie przeszukiwana pod kątem metody „main” z prawidłowym podpisem, modyfikatorami i zwracanym typem. Przykładowa klasa główna wyglądałaby tak:
public static void main (String [])
  • Metoda zostanie wywołana z argumentami „kevin”, „arrows” i „bart” jako string [].

Jak naprawić błąd „Nie można znaleźć lub załadować klasy głównej”

Rozwiązanie 1: Sprawdzanie argumentu nazwy klasy

Najczęstszym błędem popełnianym przez użytkowników jest podanie niewłaściwej nazwy klasy jako argumentu (lub poprawna nazwa klasy to niewłaściwa forma). Ponieważ deklarujemy parametry w wierszu poleceń, jest bardzo prawdopodobne, że przekażesz argument nazwy klasy w złej formie. Tutaj wymienimy wszystkie możliwe scenariusze, w których możesz popełnić błąd.

  • Pisanie prostej nazwy klasy . Jeśli deklarujesz klasę w pakiecie, takim jak „com.acme.example”, musisz użyć pełnej nazwy klasy, łącznie z pakietem, w poleceniu Java.
java com.acme.example.ListAppuals

zamiast

java ListAppuals
  • Powinieneś zadeklarować nazwę klasy zamiast deklarować nazwę pliku lub ścieżkę. Java nie pobiera klasy, jeśli zadeklarujesz dla niej ścieżkę / nazwę pliku. Niepoprawne wpisy obejmują:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • Obudowa powinna być brana pod uwagę. W poleceniach Java jest rozróżniana wielkość liter i jeśli pomylisz się choćby o jedną literę, nie będziesz w stanie załadować klasy głównej. Przykładem błędnych błędów są:
java com.acme.example.listappuals
  • Nie powinieneś deklarować nazwy pliku źródłowego . Jak wspomniano wcześniej, wystarczy zadeklarować klasę w prawidłowym formacie pełnej nazwy klasy. Przykład błędu:
java ListAppuals.java
  • Ten błąd wystąpi również, jeśli popełnisz błąd podczas wpisywania lub zapomnisz w całości wpisać nazwę klasy .

Jeśli popełniłeś jakieś niechlujne błędy przy deklarowaniu nazwy klasy, upewnij się, że to naprawiłeś, a następnie spróbuj uruchomić program.

Rozwiązanie 2: Sprawdzanie ścieżki klas

Jeśli poprawnie zadeklarowałeś nazwę klasy, ale nadal wyświetlany jest błąd, istnieje prawdopodobieństwo, że polecenie java nie może znaleźć określonej nazwy klasy w ścieżce. Ścieżka klas to ścieżka, w której środowisko wykonawcze Java wyszukuje pliki zasobów i klas. Możesz łatwo ustawić ścieżkę klasy za pomocą dwóch różnych poleceń, jak pokazano poniżej:

C:> sdkTool -classpath classpath1; classpath2 ... C:> set CLASSPATH = classpath1; classpath2 ...

Aby uzyskać więcej informacji na temat ścieżki klas, zapoznaj się z następującymi dokumentami.

Dokumentacja poleceń Java

Ustawianie ścieżki klas

Rozwiązanie 3: Sprawdzanie katalogu

Kiedy deklarujesz katalog jako ścieżkę klas, będzie on zawsze odpowiadał korzeniu przestrzeni nazw. Na przykład, jeśli „/ usr / local / acme / classes” znajduje się na ścieżce klas, Java wyszuka klasę „com.acme.example.Appuals”. Będzie szukał klasy o następującej ścieżce:

/usr/local/acme/classes/com/acme/example/Appuals.class

W zasadzie, jeśli umieścisz następujący adres w ścieżce klas, Java nie będzie w stanie znaleźć klasy:

/ usr / local / acme / classes / com / acme / example

Powinieneś także sprawdzić swój podkatalog i sprawdzić, czy pasuje do FQN. Jeśli FQN Twojej klasy to „com.acme.example.Appuals”, Java wyszuka „Appuals.class” w katalogu „com / acme / example”.

Aby dać ci przykład, załóżmy następujący scenariusz:

  • Klasa, którą chcesz uruchomić, to: com.acme.example.Appuals
  • Pełna ścieżka do pliku jest: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Bieżący katalog roboczy jest: / usr / local / Acme / classes / com / Acme / example /

Wtedy miałyby miejsce następujące scenariusze:

# źle, wymagana jest FQN java Appuals # źle, nie ma folderu `com / acme / example` w bieżącym katalogu roboczym java com.acme.example.Appuals # źle, podobnie jak w powyższym scenariuszu java -classpath. com.acme.example.Appuals # OK; ustawiona jest względna ścieżka klasy java -classpath ../../ .. com.acme.example.Appuals # OK; ustawiana jest bezwzględna ścieżka klasy java -classpath / usr / local / acme / classes com.acme.example.Appuals

Uwaga: Ścieżka klas musi także zawierać wszystkie inne klasy (niesystemowe), których potrzebuje Twoja aplikacja.

Rozwiązanie 4: Sprawdzanie pakietu zajęć

Jeśli wszystkie powyższe rozwiązania sprawdzają się w Twoim przypadku, musisz upewnić się, że kod źródłowy jest umieszczony we właściwym folderze. Ponadto poprawnie zadeklarowałeś pakiet . Jeśli uruchomisz swój kod za pomocą IDE, prawdopodobnie poinformuje Cię ono o problemie. Jednak w naszym przypadku, ponieważ uruchamiamy go w wierszu poleceń, błąd pozostanie niezauważony i pojawi się omawiany błąd klasy.