Beheben den Fehler Could Not Find or Load Main Class in Java

Mohammad Irfan 12 Oktober 2023
  1. Fehler konnte nicht gefunden werden, da in Java der falsche Name übergeben wurde
  2. Fehler konnte aufgrund eines falschen Paketnamens in Java nicht gefunden werden
  3. Fehler aufgrund eines falschen CLASSPATH in Java konnte nicht gefunden werden
Beheben den Fehler Could Not Find or Load Main Class in Java

In diesem Tutorial wird der Fehler Could not find or load main class in Java vorgestellt.

Angenommen, wir haben einen Code geschrieben und kompiliert. Bis jetzt funktioniert alles einwandfrei, aber als wir es endlich ausgeführt haben, ist ein Fehler aufgetaucht.

could not find or load main class

In diesem Tutorial wird erläutert, warum dieser Fehler auftritt und wie er behoben werden kann. Lassen Sie uns zunächst zusammenfassen, wie wir ein Java-Programm über die Eingabeaufforderung ausführen.

Zuerst kompilieren wir den Code mit dem javac-Befehl wie unten:

javac<.java file name>

Nach dem Ausführen des obigen Befehls wird eine Datei mit der Erweiterung .class im aktuellen Ordner erstellt.

Die .class-Datei hat dieselbe Klasse wie das .java-Programm. Wir führen dann die .class-Datei mit dem folgenden Befehl aus, um den Java-Code auszuführen:

java<classname>

Möglicherweise erhalten wir den Fehler could not find or load main class. Dieser Fehler ist ein Laufzeitfehler und tritt auf, wenn die Java Virtual Machine die Hauptklasse (Klasse, die die Hauptmethode enthält), die wir auszuführen versuchen, nicht finden kann.

Dieser Fehler tritt am häufigsten auf, wenn unsere Java-Programme über die Eingabeaufforderung ausgeführt werden. Bevor wir auf die Ursachen dieses Fehlers eingehen, wollen wir zunächst CLASSPATH verstehen.

CLASSPATH in Java

Dies ist die executable.class und andere Ressourcendateien.

Die JVM verwendet sie, um die Dateien zu lokalisieren. Der Standard-CLASSPATH ist das aktuelle Verzeichnis, es sei denn, wir setzen den CLASSPATH explizit in den Systemvariablen.

Um ein Programm auszuführen, müssen wir den Klassennamen übergeben. Wir nehmen das folgende Beispiel, um den Punkt zu veranschaulichen:

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

Lassen Sie uns es zuerst mit dem Befehl javac kompilieren:

C :\Users\User\Documents\DelftStack\java
    > javac DelftStack.java C :\Users\USer\Documents\DelftStack\java
    >

Nach der Ausführung des obigen Befehls wird eine Datei DelftStack.class in unserem aktuellen Verzeichnis erstellt. Lassen Sie uns diese Datei mit dem Java-Befehl ausführen.

C :\Users\User\Documents\DelftStack\java
    > java DelftStack.class Error : Could not find or load main class DelftStack.
class Caused by : java.lang.ClassNotFoundException : DelftStack.class

Hier erhalten wir eine Fehlermeldung, weil wir versuchen, die Datei .class auszuführen. Stattdessen müssen wir nur den Klassennamen übergeben.

Schauen Sie unten:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

Fehler konnte nicht gefunden werden, da in Java der falsche Name übergeben wurde

Der Fehler could not find or load the main class kann auch auftreten, wenn wir den falschen Klassennamen übergeben. Wenn wir das vorherige Beispiel fortsetzen und versuchen, das Programm mit dem falschen Namen wie folgt auszuführen:

C :\Users\User\Documents\DelftStack\java > java DelftStac Error
    : Could not find or load main class DelftStac Caused by : java.lang.ClassNotFoundException
    : DelftStac

Wir erhalten den obigen Fehler, weil wir den Klassennamen falsch geschrieben haben. Hier versucht die JVM, eine Klasse namens DelftStac auszuführen, die nicht existiert.

Wir können dieses Problem lösen, indem wir den Klassennamen wie folgt richtig schreiben:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

Beachten Sie auch hier, dass beim Klassennamen zwischen Groß- und Kleinschreibung unterschieden wird. Wenn wir die Klasse Delftstack ausführen, erhalten wir eine Fehlermeldung.

Schauen Sie unten:

C :\Users\User\Documents\DelftStack\java > java Delftstack Error
    : Could not find or load main class Delftstack Caused by : java.lang.NoClassDefFoundError
    : Delftstack(wrong name
                 : Delftstack)

Wir sollten die richtige Schreibweise und die richtigen Groß- und Kleinschreibung verwenden, um eine Datei erfolgreich auszuführen.

Fehler konnte aufgrund eines falschen Paketnamens in Java nicht gefunden werden

Lassen Sie uns unsere Klasse DelftStack in das Paket com.DelftStack verschieben. Ein Paket wird verwendet, um ähnliche Klassen zusammenzuhalten.

Sehen Sie sich den folgenden Code an:

package com.DelftStack;

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

Um ein Paket in Java zu kompilieren, verwenden wir den folgenden Befehl:

javac - d.<.java file name>

Der Flag-Schalter -d wird verwendet, um anzugeben, wo die generierte Klassendatei gespeichert werden soll. Der . bedeutet das aktuelle Verzeichnis.

Wir kompilieren den obigen Code wie folgt:

C :\Users\User\Documents\DelftStack\java > javac - d.DelftStack.java

Nach dem Ausführen des obigen Befehls wird die folgende Ordnerstruktur in unserem aktuellen Verzeichnis erstellt.

com\DelftStack\DelftStack.class

Wie wir sehen können, ist unsere Klassendatei zwei Ordner tief von unserem aktuellen Verzeichnis entfernt. Wenn wir also versuchen, unsere Klassendatei wie in den vorherigen Fällen auszuführen, erhalten wir einen Fehler.

C :\Users\User\Documents\DelftStack\java > java DelftStack Error
    : Could not find or load main class DelftStack Caused by : java.lang.ClassNotFoundException
    : DelftStack

Der Grund für diesen Fehler ist, dass in unserem aktuellen Ordner keine Klasse DelftStack existiert. Um die in einem Paket vorhandene Klasse auszuführen, müssen wir ihren vollständig qualifizierten Namen übergeben (in diesem Fall com.DelftStack.DelftStack).

C :\Users\User\Documents\DelftStack\java > java com.DelftStack.DelftStack Hello from DelftStack

Dies weist Java an, nach der Klasse im Ordner com\DelftStack zu suchen.

Fehler aufgrund eines falschen CLASSPATH in Java konnte nicht gefunden werden

Der CLASSPATH teilt der JVM mit, wo die .class-Dateien vorhanden sind.

Angenommen, wir befinden uns derzeit in einem anderen Ordner und möchten ein Java-Programm ausführen, dessen Klassendatei in einem anderen Ordner vorhanden ist. In diesem Fall können wir den Speicherort der Klassendatei mit der Option -classpath übergeben.

Beispielsweise:

java - classpath XYZ / ABC < class name
>

Der obige Befehl weist Java an, nach der Datei .class im Ordner ZYX/ABC zu suchen.

Im vorherigen Fall haben wir ein Paket erstellt.

Angenommen, wir möchten die Datei im Ordner com/DelftStack ausführen. Mit dem folgenden Befehl können wir dies tun:

> java - classpath../../ com.DelftStack.DelftStack Hello from DelftStack

Das ../ bedeutet das übergeordnete Verzeichnis. ../../ bedeutet also, zwei Verzeichnisebenen nachzuschlagen.

Nehmen wir ein weiteres Beispiel, nehmen wir an, wir befinden uns am Ort des Desktops (Ordners) und möchten eine Klassendatei an einer anderen Stelle auf dem Computer ausführen. Wir können dies unten tun.

> java - cp C :\Users\User\Documents\DelftStack\java com.DelftStack.DelftStack Hello from DelftStack

Das Flag -cp ist die Abkürzung für -classpath. Hier haben wir den vollständigen Speicherort des Ordners übergeben, in dem die Datei .class vorhanden ist.

Verwandter Artikel - Java Error