it-swarm.com.de

"Konnte Hauptklasse nicht finden oder laden" Fehler beim Ausführen des Java-Programms mit der Eingabeaufforderung "cmd"

Ich führe ein einfaches "HelloWorld" -Programm aus. Ich erhalte diesen Fehler im Befehl Prompt:

Hauptklasse HelloWorld konnte nicht gefunden oder geladen werden.

Ich habe die Variable CLASSPATH und PATH im System eingestellt. In der cmd-Eingabeaufforderung renne ich von dem Verzeichnis aus, in dem das HelloWorld-Programm gespeichert ist. Ich kann sehen, dass der Klassenname und der Dateiname gleich sind und auch die .class-Datei im selben Verzeichnis erstellt wurde. Was könnte das Problem sonst sein?

Mein Beispielprogramm sieht so aus:

package org.tij.exercises;
public class HelloWorld {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World!!");
  }
}
31
user241702

Wenn sich die Main-Klasse in einem Paket befindet, müssen Sie es wie folgt ausführen: 

Java <packageName>.<MainClassName>

In Ihrem Fall sollten Sie das Programm wie folgt ausführen: 

Java org.tij.exercises.HelloWorld 
37
Kakarot

Was ist dein CLASSPATH Wert?

Es kann so aussehen: 

 .;%Java_HOME%\lib\dt.jar;%Java_HOME%\lib\tools.jar 

Ich denke, Ihr Wert enthält diesen .; nicht. 

Also, ADD IT.
Wenn Sie fertig sind, restart CMD neu

Das kann funktionieren.


Die Datei HelloWorld.Java befindet sich beispielsweise im Pfad: D:\myjavatest\org\yz\test und ihre package lautet: org.yz.test.

Jetzt befinden Sie sich im Pfad D:\myjavatest\ in der CMD-Zeile.
Geben Sie Folgendes ein, um es zu kompilieren: 

javac org/yz/test/HelloWorld.Java

Geben Sie dann Folgendes ein, um es auszuführen: 

Java org.yz.test.HelloWorld

Sie können bekommen, was Sie wollen. 

18
youngzy

Ich habe bin aus der CLASSPATH entfernt. Ich fand heraus, dass ich den Befehl Java von dem Verzeichnis aus ausführte, in dem sich der HelloWorld.Java befindet, d. H .:

C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>Java HelloWorld

Also ging ich zurück ins Hauptverzeichnis und führte Folgendes aus:

Java org.tij.exercises.HelloWorld

und es hat funktioniert, d.h .:

C:\Users\xyz\Documents\Java\javastudy\src>Java org.tij.exercises.HelloWorld

Hallo Welt!!

12
user241702

Da Sie es über die Eingabeaufforderung ausführen, müssen Sie sicherstellen, dass Ihr classpath korrekt ist. Wenn Sie dies bereits festgelegt haben, müssen Sie Ihr Terminal neu starten, um die Systemvariablen erneut zu laden.

Wenn -classpath und -cp nicht verwendet werden und CLASSPATH nicht festgelegt ist, wird das aktuelle Verzeichnis verwendet (.). Wenn Sie jedoch .class-Dateien ausführen, müssen Sie sich in dem Ordner befinden, der die Ordner Java package name enthält.

Wenn Sie die .class-Datei in ./target/classes/com/foo/app/App.class haben, haben Sie folgende Möglichkeiten:

Java -cp target/classes com.foo.app.App
CLASSPATH=target/classes Java com.foo.app.App
cd target/classes && Java com.foo.app.App

Sie können Ihren Klassenpfad überprüfen, indem Sie die Variable CLASSPATH drucken:

  • Linux: echo $CLASSPATH
  • Windows: echo %CLASSPATH%

welche Einträge durch : getrennt sind.

Siehe auch: Wie führe ich Java-.class-Dateien aus?

4
kenorb

Ein Grund für diesen Fehler könnte sein

Hauptklasse <class name> konnte nicht gefunden oder geladen werden

Möglicherweise verwenden Sie Ihren Klassennamen als anderen Namen und speichern den Klassennamen unter einem anderen Namen. Sie können den Namen einer Java-Quelldatei unter einem anderen Namen als dem Klassennamen speichern. Zum Beispiel:

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

sie können als Hello.Java speichern, aber

So kompilieren Sie: javac Hello.Java 

Dadurch wird automatisch eine A.class-Datei am selben Ort erstellt.

Jetzt ausführen: Java A

3
Adnan

Ich hatte das gleiche Problem, meines war etwas anders, obwohl ich keinen Paketnamen hatte. Mein Problem war zum Beispiel der Klassenpfad:

C:\Java Example>Java -cp . HelloWorld 

Die -cp-Option für Java und von dem, was ich aus meiner Erfahrung sagen kann (nicht viel), aber ich habe ungefähr 20 Mal auf den Fehler gestoßen, als ich verschiedene Methoden ausprobierte und bis ich die Klasse Path deklarierte, erhielt ich denselben Fehler. Vishrant hat das richtig gesagt. repräsentiert das aktuelle Verzeichnis. 

Wenn Sie weitere Informationen zu den Java-Optionen benötigen, geben Sie Java -? oder Java -help ein. Ich denke, die Optionen sind nicht optional.

Ich habe gerade etwas recherchiert. Ich habe eine Website gefunden, die über CLASSPATH im Detail geht. Die CLASSPATH muss als Umgebungsvariable festgelegt werden. zum aktuellen Verzeichnis <.>. Sie können es über die Befehlszeile in Windows einstellen:

// Set CLASSPATH to the current directory '.'
Prompt> set CLASSPATH=.

Wenn Sie eine neue Umgebungseinstellung hinzufügen, müssen Sie einen Neustart durchführen, bevor Sie die Variable aktivieren. Sie können dies aber über den Befehl Prompt einstellen. Es kann auch eingestellt werden, wie ich es am Anfang erwähnt habe. Für weitere Informationen und falls Sie ein anderes Betriebssystem verwenden, überprüfen Sie: Umgebungsvariablen .

3
outlooker

Ich habe genau die gleiche Fehlermeldung erhalten, weil ich vergessen habe, die Erweiterung .class zu entfernen, wenn die Java-Klasse ausgeführt wird. Also stattdessen:

Java myClass.class

Man sollte das tun:

Java myClass
2
Darush

Ich hatte ein ähnliches Problem beim Ausführen von Java auf Win10

anstatt 

$ Java ./hello
Error: Could not find or load main class ..hello

Lauf

$ Java hello
Hello, World
2
pev.hall

Führen Sie Ihr Java-Programm mit dem Befehl Java -d . HelloWorld aus.

Dieser Befehl funktioniert, wenn Sie ein Paket deklariert haben.

. repräsentiert das aktuelle Verzeichnis /. 

2
Vishrant

stand vor dem gleichen Problem. gelöst durch die folgenden Schritte

  • wechseln Sie in das Verzeichnis mit dem Paket 'org.tij.exercises' (z. B. in Eclipse kann es sich um Ihren src-Ordner handeln)
  • verwenden Sie Java org.tij.exercises.HelloWorld
0
Maria

Ich hatte ein ähnliches Problem, aber es lag am Leerzeichen in meinem Dateiverzeichnis, in dem ich meine Java class aufbewahrte.

Nachfolgendes Szenario zusammen mit der Lösung:

   public class Sample{
      public static void main(String[] args) {
        System.out.println("Hello world, Java");
      }
}
  • Meine Sample.Java-Klasse wurde in Verzeichnis "D:\Java Programs\Sample.Java" gespeichert. [HINWEIS: Paketanweisung in Java class] nicht vorhanden.
  • In der Eingabeaufforderung wurde das Verzeichnis in "D:\Java Programs \" geändert, mein Programm wurde kompiliert, konnte jedoch nicht mit der Fehlermeldung "Konnte die Hauptklasse nicht finden oder laden" ausgeführt werden.
  • Nach all den möglichen Lösungen über SOF (nichts hat funktioniert) wurde mir klar, dass möglicherweise Speicherplatz für dieses Problem verantwortlich ist.
  • Das Entfernen des Ordnernamenraums char ['Java Programs' -> 'JavaPrograms'] hat mein Programm überraschenderweise erfolgreich ausgeführt.

    Ich hoffe es hilft
0
user3181500

Ich habe IntelliJ verwendet, um meine JAR-Datei zu erstellen, die einige unverpackte Gläser aus meinen Bibliotheken enthielt. Eines dieser anderen Gefäße hatte im MANIFEST signierte Sachen, die das Laden der JAR-Datei verhinderten. Keine Warnungen oder irgendetwas funktionierten einfach nicht. Could not find or load main class

Durch das Entfernen des ausgepackten Gefäßes, in dem sich das Manifest befand, wurde das Problem behoben.

0
Sam Barnum

Für viele von uns, zumindest für mich, denke ich, dass die Klassenpfadhierarchie nicht intuitiv ist, da ich in einer Verzeichnisstruktur arbeite und es fühlt sich so an, als müsste es so sein. 

Java betrachtet den Namen der Klasse anhand ihres Paketpfads und nicht nur anhand des Dateipfads. 

Es spielt keine Rolle, ob: Ich bin im lokalen Verzeichnis ./packagefoo/MainClass oder Ein Verzeichnis auf ./packagefoo/ oder Ein ./packagefoo/MainClass/foo.

Der Befehl "Java packagefoo.MainClass" führt das Stammverzeichnis% CLASSPATH% aus, was für Java von Bedeutung ist. Dann durchquert er die Paketnamen und nicht die Pfadnamen, die wir Laien-Codierer erwarten würden. 

Wenn mein CLASSPATH auf% CWD%/eingestellt ist, funktioniert "Java packagefoo.MainClass". Wenn ich den CLASSPATH auf% CWD%/packagefoo/setze, kann packagefoo.MainClass nicht gefunden werden. Immer "Java MainClass" bedeutet nichts, wenn es Mitglied von "package" ist, bis ich den Java-Code "package packagefoo;" und verschieben Sie die Klassendatei in ein Verzeichnis. 

Wenn ich "package packagefoo;" "Verpackung verpacken"; Ich muss einen Unterordner unter CLASSPATH/foopackage oder foopackage anlegen. MainClass funktioniert nicht mehr. 

Um es noch schlimmer zu machen: Zwischen PATH, CLASSPATH, JAVAHOME, für Windows, JDeveloper, Oracle Database und jedem Benutzernamen, unter dem es installiert wurde, denke ich, dass ein Programmierer, der versucht, etwas schnell aufzufangen, die Pfadvariablen und die Struktur bis zu etwas zwingt funktioniert ohne zu verstehen, was es bedeutet.

zumindest habe ich es getan. 

0
phydroxide

Erstellen Sie einen Ordner org/tij/Übungen und verschieben Sie die HelloWorld.Java-Datei. Dann unter dem Befehl ausführen

javac -cp . org/tij/exercises/HelloWorld.Java

UND

Java -cp . org/tij/exercises/HelloWorld
0
Ashwin Shetty

Ich hatte das gleiche Problem und versuchte alles, was hier erwähnt wurde. Die Sache war die, dass ich mein Projekt in Eclipse nach der Klassenerstellung nicht aktualisiert habe.

0
decoder