Hauptklassenfehler konnte nicht gefunden oder geladen werden

1. Einleitung

Wenn wir ein Java-Programm ausführen, wird gelegentlich die Meldung "Hauptklasse konnte nicht gefunden oder geladen werden" angezeigt. Der Grund ist leicht zu erraten: Die JVM konnte die Hauptklasse nicht finden und gab diesen Fehler aus. Aber warum konnte es nicht?

In diesem Tutorial werden die wahrscheinlichen Gründe für das Nichtfinden der Hauptklasse erläutert. Außerdem werden wir sehen, wie sie behoben werden können.

2. Beispielprogramm

Wir beginnen mit einem HelloWorld- Programm:

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

Jetzt kompilieren wir es:

$ javac HelloWorld.java

Hier generiert der Compiler eine .class- Datei für unser Programm. Diese .class- Datei wird im selben Verzeichnis generiert. Die .class- Datei hat denselben Namen wie der im Java-Programm angegebene Klassenname. Diese .class- Datei ist ausführbar.

In den folgenden Abschnitten führen wir diese .class- Datei aus und versuchen, die wahrscheinlichen Gründe für den Fehler "Hauptklasse konnte nicht gefunden oder geladen werden" zu verstehen.

3. Falscher Klassenname

Um eine vom Java-Compiler generierte .class- Datei auszuführen , können Sie den folgenden Befehl verwenden:

java 

Lassen Sie uns nun unser Programm ausführen:

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

Ja, es ist mit dem Fehler "Hauptklasse helloworld konnte nicht gefunden oder geladen werden" fehlgeschlagen.

Wie bereits erwähnt, generiert der Compiler die .class- Datei mit genau demselben Namen, der der Java-Klasse im Programm zugewiesen wurde . Also in unserem Fall werden die Hauptklasse haben den Namen Helloworld , nicht Hello World .

Versuchen wir es noch einmal mit dem richtigen Gehäuse:

$ java HelloWorld Hello world..!!!

Diesmal lief es erfolgreich.

3.1. Dateierweiterung

Um ein Java-Programm zu kompilieren, müssen wir den Dateinamen mit seiner Erweiterung (. Java ) angeben :

$ javac HelloWorld.java

Aber um a. Klassendatei müssen wir den Klassennamen angeben, nicht den Dateinamen. Es ist also nicht erforderlich, die Erweiterung .class bereitzustellen :

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

Lassen Sie uns unser Programm erneut mit dem richtigen Klassennamen ausführen:

$ java HelloWorld Hello world..!!!

4. Java-Paketnamen

In Java halten wir ähnliche Klassen in einem sogenannten Paket zusammen .

Kommen wir nun Hello World Klasse in die com.baeldung Paket:

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

Lassen Sie uns nun das aktualisierte HelloWorld- Programm wie zuvor kompilieren und ausführen :

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

Aber wieder bekommen wir den Fehler "Hauptklasse HelloWorld konnte nicht gefunden oder geladen werden"!

Versuchen wir zu verstehen, was wir hier vermisst haben.

Um eine Java-Klasse auszuführen, die sich in einem Paket befindet, müssen Sie ihren vollständig qualifizierten Namen angeben . Also in unserem Fall Hello World ist voll qualifizierte Namen ist com.baeldung.HelloWorld .

Als wir das com.baeldung- Paket erstellt haben , haben wir tatsächlich eine Ordnerstruktur erstellt wie:

com/baeldung/HelloWorld.java

Versuchen wir zunächst, unser Programm aus dem Verzeichnis com / baeldung auszuführen :

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

Trotzdem können wir unser Programm nicht ausführen.

Als wir hier den vollständig qualifizierten Klassennamen com.baeldung.HelloWorld angegeben haben , hat Java versucht, die Datei HelloWorld.class in com / baeldung unter dem Verzeichnis zu finden, in dem wir das Programm ausgeführt haben.

Da wir uns bereits in com / baeldung befanden , konnte Java das HelloWorld- Programm nicht finden und ausführen .

Gehen wir nun zurück zum übergeordneten Ordner und führen ihn aus:

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

Ja, wir können der Welt wieder „Hallo“ sagen.

5. Ungültiger Klassenpfad

Bevor wir fortfahren, wollen wir zunächst den Klassenpfad verstehen - es sind die Klassen, die unserer derzeit ausgeführten JVM zur Verfügung stehen.

Wir verwenden die Variable classpath, um der JVM mitzuteilen, wo sich die .class- Dateien im Dateisystem befinden.

Während Sie ein Programm ausführen , können Sie den Klassenpfad mit der Option -classpath bereitstellen . Beispiel:

java -classpath /my_programs/compiled_classes HelloWorld

Hier finden Java sucht HelloWorld.class Datei in / my_programs / compiled_classes Ordner, um einen Ordner , dessen Namen wir gerade aus. Standardmäßig ist die Klassenpfadvariable auf "." Festgelegt, was das aktuelle Verzeichnis bedeutet.

Im obigen Abschnitt haben wir unser Verzeichnis geändert, um unser Programm auszuführen. Aber was ist, wenn wir es aus einem anderen Ordner ausführen möchten? Dann hilft uns die Variable classpath.

Um unser Programm über das Verzeichnis com / baeldung auszuführen , können wir einfach angeben, dass unser Klassenpfad zwei Verzeichnisse umfasst - eines für jeden Paketteil :

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

Hier steht ".." für das übergeordnete Verzeichnis. In unserem Fall steht "../../" für die Spitze unserer Pakethierarchie.

6. Fazit

In diesem Tutorial haben wir die wahrscheinlichen Gründe für den Fehler "Hauptklasse konnte nicht gefunden oder geladen werden" kennengelernt.

Dann haben wir natürlich auch gelernt, wie man diesen Fehler löst.