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!!");
}
}
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
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.
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!!
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:
echo $CLASSPATH
echo %CLASSPATH%
welche Einträge durch :
getrennt sind.
Siehe auch: Wie führe ich Java-.class-Dateien aus?
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
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 .
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
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
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 /.
stand vor dem gleichen Problem. gelöst durch die folgenden Schritte
Java org.tij.exercises.HelloWorld
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");
}
}
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.
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.
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
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.