„Could not find or load main class“: Der bekannte Schrecken jedes Java-Anfängers
\n\nDu hast gerade angefangen, Java zu lernen, dein erstes HelloWorld.java geschrieben, mit klopfendem Herz die Eingabetaste im Terminal gedrückt … Und statt der erhofften Begrüßung siehst du diese kalte Meldung:
Error: Could not find or load main class HelloWorld\nCaused by: java.lang.ClassNotFoundException: HelloWorld\n\nKommt dir bekannt vor? Wenn ja – du bist nicht allein. Diese Frage auf Stack Overflow hat Millionen von Aufrufen und ist der absolute Rekordhalter unter den Fehlern bei Java-Anfängern. Die gute Nachricht: Die Ursache ist fast immer banal und die Lösung dauert 30 Sekunden. Die schlechte Nachricht: Wenn du nicht verstehst, warum es passiert ist, wird dich der Fehler immer wieder verfolgen.
\n\nIn diesem Artikel analysieren wir alle möglichen Ursachen für „Could not find or load main class“ anhand konkreter Beispiele. Du lernst nicht nur, den Fehler zu beheben, sondern auch zu verstehen, wie Java deine Klasse sucht. Los geht's!
\n\nKurz und knapp: Was will uns die JVM sagen?
\n\nWenn du java Klassenname eingibst, erhält die Java Virtual Machine (JVM) den Befehl: „Finde die Klasse mit diesem Namen und starte ihre main-Methode“. Wenn die JVM die entsprechende .class-Datei nicht findet oder darin keine korrekte main-Methode vorliegt, gerät sie in Panik und wirft diesen Fehler.
Wichtig zu verstehen: Java arbeitet mit Bytecode (.class-Dateien), nicht mit Quellcode (.java). Du kompilierst zuerst .java mit dem Befehl javac in .class und startest dann die .class-Datei mit java. Wenn im zweiten Schritt etwas schiefgeht – erhältst du den berüchtigten Fehler.
Szenario 1: Du hast vergessen, die Datei zu kompilieren
\n\nDer häufigste Grund, besonders bei denen, die gerade erst das Terminal geöffnet haben. Du schreibst:
\n\njava HelloWorld\n\nHast aber vorher nicht ausgeführt:
\n\njavac HelloWorld.java\n\nOhne Kompilierung existiert die Datei HelloWorld.class einfach nicht. Die JVM versucht ehrlich, sie zu finden, aber ohne Erfolg – und gibt den Fehler aus.
Wie überprüfen?
\n- \n
- Schau im aktuellen Ordner nach: Gibt es eine Datei
HelloWorld.class? \n - Wenn nur
HelloWorld.javavorhanden ist – kompiliere sie. \n - Wenn keines von beiden da ist – überprüfe, ob du im richtigen Verzeichnis bist. \n
Szenario 2: Tippfehler im Klassennamen (Groß-/Kleinschreibung ist entscheidend!)
\n\nJava ist eine streng typisierte Sprache und achtet auf Groß- und Kleinschreibung. Wenn deine Klasse HelloWorld heißt, du aber schreibst:
java helloworld\njava HelloWorld.class\njava HelloWorld.java\n\n– wird die JVM dich nicht verstehen. Der Klassenname muss buchstabengetreu mit dem Dateinamen übereinstimmen. Ja, HelloWorld und helloworld sind für die JVM zwei verschiedene Namen.
.class oder .java an den Befehl java an. Verwende nur den reinen Klassennamen!\nSzenario 3: Probleme mit Packages (die tückischste Falle)
\n\nSobald du anfängst, Packages zu verwenden, ändern sich die Spielregeln. Angenommen, du hast folgende Datei:
\n\n// Datei: src/com/pythonlib/MyApp.java\npackage com.pythonlib;\n\npublic class MyApp {\n public static void main(String[] args) {\n System.out.println("Hallo von PythonLib!");\n }\n}\n\nViele Anfänger machen Folgendes:
\n\ncd src\njavac com/pythonlib/MyApp.java // Kompilierung erfolgreich\njava MyApp // FEHLER!\n\nWarum? Weil der vollständige Klassenname jetzt com.pythonlib.MyApp lautet, nicht nur MyApp. Die JVM sucht die Klasse unter ihrem vollständigen Namen.