Fix: Hauptklasse konnte nicht gefunden oder geladen werden

Der Fehler ' Hauptklasse konnte nicht gefunden oder geladen werden ' tritt auf, wenn ein Java-Befehl in der Eingabeaufforderung zum Starten eines Java-Programms verwendet wird, indem der Klassenname im Terminal angegeben wird. Der Grund, warum dies passiert, liegt hauptsächlich an dem Programmierfehler des Benutzers beim Deklarieren der Klasse.

Die Java-Befehlszeile der Hauptklasse konnte nicht gefunden oder geladen werden

Wie bereits erwähnt, hängt dieser Fehler zumeist nicht mit dem System zusammen, und der Benutzer begeht in verschiedenen Szenarien einen Fehler, wie unten gezeigt. Bevor Sie fortfahren, setzen wir voraus, dass Sie Grundkenntnisse in der Programmiersprache Java haben und wissen, wie diese funktioniert.

Wodurch wird der Fehler "Hauptklasse konnte nicht gefunden oder geladen werden" in Java verursacht?

Die Meldung "Hauptklasse konnte nicht gefunden oder geladen werden" bedeutet, dass der erste Schritt der Java-Engine, mit der die Klasse zur Ausführung abgerufen wird, fehlgeschlagen ist. Der Java-Befehl konnte die Klasse nicht im richtigen Verzeichnis finden.

In einigen Fällen müssen Sie den richtigen Dateipfad hinzufügen und das Java-Terminal auf den richtigen Speicherort verweisen. Da Sie den Befehl über das Befehlszeilenterminal ausführen, weiß der Computer nicht, wo sich die Klasse befindet oder wo sie sich befindet. In Ziel-IDEs ist dies nicht das Problem, da die IDE einen Zeiger auf das aktuelle Arbeitsverzeichnis hält.

Was ist die Java-Syntax?

Bevor wir mit der Fehlerbehebung beginnen, warum das Terminal beim Versuch, den Befehl auszuführen, einen Fehler zurückgibt, müssen wir uns zunächst die Syntax des Befehls ansehen. Wenn Sie nicht die richtige Syntax verwenden, tritt dieser Fehler zwangsläufig auf.

Die normale Syntax des Befehls sieht ungefähr so ​​aus:

 Java [...] [...] 

Hier ist eine Befehlszeilenoption, ein vollständig qualifizierter Java-Klassenname und ein Befehlszeilenargument, das bei der Kompilierung des gesamten Pakets an Ihre Anwendung übergeben wird.

Ein Beispiel für einen gültigen Befehl ist:

 Java -Xmx100m com.acme.example.ListAppuals Kevin Pfeile Bart 

Mit dem obigen Befehl führt der Java-Befehl die folgenden Vorgänge aus:

  • Es wird nach einer kompilierten Version der Klasse ' com.acme.example.ListAppuals ' gesucht .
  • Nach der Suche wird die Klasse geladen.
  • Als Nächstes wird beim Laden der Klasse nach einer 'main'-Methode mit einer gültigen Signatur, Modifizierern und einem gültigen Rückgabetyp gesucht. Eine Beispielhauptklasse wäre so etwas wie:
 public static void main (String []) 
  • Die Methode wird mit den Argumenten 'kevin', 'arrows' und 'bart' als String [] aufgerufen.

Wie man das Problem behebt, dass die Hauptklasse nicht gefunden oder geladen werden konnte

Lösung 1: Überprüfen des Klassennamenarguments

Der häufigste Fehler, den Benutzer machen, ist, dass sie einen falschen Klassennamen als Argument angeben (oder ein richtiger Klassenname eine falsche Form hat). Da wir Parameter in der Befehlszeile deklarieren, ist es sehr wahrscheinlich, dass Sie das Klassennamenargument in einer falschen Form übergeben. Hier listen wir alle möglichen Szenarien auf, in denen Sie einen Fehler machen können.

  • Schreiben eines einfachen Klassennamens . Wenn Sie die Klasse in einem Paket wie 'com.acme.example' deklarieren, müssen Sie den vollständigen Klassennamen einschließlich des Pakets im Java-Befehl verwenden.
 java com.acme.example.ListAppuals 

anstatt

 Java ListAppuals 
  • Sie sollten einen Klassennamen deklarieren, anstatt einen Dateinamen oder einen Pfadnamen zu deklarieren. Java ruft die Klasse nicht ab, wenn Sie einen Pfadnamen / Dateinamen dafür deklarieren. Falsche Einträge umfassen folgend:
 java ListAppuals.class java com / acme / example / ListAppuals.class 
  • Das Gehäuse sollte berücksichtigt werden. Bei Java-Befehlen wird zwischen Groß- und Kleinschreibung unterschieden, und wenn Sie nur einen Buchstaben falsch eingeben, können Sie die Hauptklasse nicht laden. Ein Beispiel für falsche Fehler sind:
 java com.acme.example.listappuals 
  • Sie sollten keinen Quelldateinamen deklarieren. Wie bereits erwähnt, müssen Sie die Klasse nur im richtigen Format für den vollständigen Klassennamen deklarieren. Beispiel für einen Fehler ist:
 java ListAppuals.java 
  • Dieser Fehler tritt auch auf, wenn Sie einen Tippfehler machen oder vergessen, den Klassennamen vollständig zu schreiben .

Wenn Sie beim Deklarieren des Klassennamens schlampige Fehler gemacht haben, beheben Sie diese und starten Sie das Programm.

Lösung 2: Überprüfen des Klassenpfads

Wenn Sie den Klassennamen korrekt deklariert haben, der Fehler jedoch weiterhin angezeigt wird, kann es sein, dass Java den angegebenen Klassennamen im Pfad nicht finden konnte. Der Klassenpfad ist ein Pfad, in dem Java Runtime nach Ressourcen- und Klassendateien sucht. Sie können den Klassenpfad einfach mit zwei verschiedenen Befehlen festlegen, wie unten gezeigt:

 C:> sdkTool -klassenpfad klassenpfad1; klassenpfad2 ... C:> setze KLASSENPFAD = klassenpfad1; klassenpfad2 ... 

Weitere Informationen zum Klassenpfad finden Sie in den folgenden Dokumenten.

Java-Befehlsdokumentation

Klassenpfad einstellen

Lösung 3: Verzeichnis überprüfen

Wenn Sie ein Verzeichnis als Klassenpfad deklarieren, entspricht es immer dem Stammverzeichnis des Namespaces. Befindet sich beispielsweise "/ usr / local / acme / classes" im Klassenpfad, sucht Java nach einer Klasse "com.acme.example.Appuals". Es wird nach einer Klasse mit dem folgenden Pfadnamen gesucht:

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

Wenn Sie also im Wesentlichen die folgende Adresse in den Klassenpfad eingeben, kann Java die Klasse nicht finden:

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

Sie sollten auch Ihr Unterverzeichnis überprüfen, um festzustellen, ob es mit dem FQN übereinstimmt. Wenn Ihre Klassen-FQN "com.acme.example.Appuals" ist, sucht Java im Verzeichnis "com / acme / example" nach einer "Appuals.class".

Nehmen wir als Beispiel das folgende Szenario an:

  • Die Klasse, die Sie ausführen möchten, lautet: com.acme.example.Appuals
  • Der vollständige Dateipfad lautet: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Das aktuelle Arbeitsverzeichnis lautet: / usr / local / acme / classes / com / acme / example /

Dann würden die folgenden Szenarien gelten:

 # falsch, FQN wird benötigt java Appuals # falsch, im aktuellen Arbeitsverzeichnis befindet sich kein Ordner `com / acme / example` java com.acme.example.Appuals # falsch, ähnlich wie im obigen Beispiel java -classpath. com.acme.example.Appuals # OK; ein relativer Klassenpfad wird gesetzt Java-Klassenpfad ../../ .. com.acme.example.Appuals # OK; Ein absoluter Klassenpfad ist java -classpath / usr / local / acme / classes com.acme.example.Appuals 

Hinweis: Der Klassenpfad muss auch alle anderen Klassen (Nicht-Systemklassen) enthalten, die Ihre Anwendungen benötigen.

Lösung 4: Überprüfen des Klassenpakets

Wenn alle oben genannten Lösungen in Ihrem Fall zutreffen, müssen Sie sicherstellen, dass sich Ihr Quellcode im richtigen Ordner befindet. Außerdem haben Sie das Paket korrekt deklariert. Wenn Sie Ihren Code mit einer IDE ausführen, werden Sie wahrscheinlich über das Problem informiert. In unserem Fall bleibt der Fehler jedoch unbemerkt, da wir ihn in der Eingabeaufforderung ausführen, und Sie erhalten den zur Diskussion stehenden Klassenfehler.

Interessante Artikel