Hauptklasse kann nicht gefunden werden

uhuwe

Mitglied
Hallo Javaisten,

also ich habe eine Datei namens "Vektorspiel.java":

[CODE lang="java" title="Vektorspiel.java"]package de.vektorspiel;

import java.util.Scanner;

public class Vektorspiel
{
public static void main(String[] args)
{
}
}[/CODE]

Kompiliert wird ohne Probleme aber beim ausführen mit "java Vektorspiel" erhalte ich folgendes:
[CODE lang="bash" title="kompiliert mit "javac Vektorspiel.java""]Fehler: Hauptklasse Vektorspiel konnte nicht gefunden oder geladen werden
Ursache: java.lang.NoClassDefFoundError: de/vektorspiel/Vektorspiel (wrong name: Vektorspiel)[/CODE]

Kann die Ursache am irgendwie am Package liegen?

Danke schon mal für alles.
 
Wie genau versuchst Du es denn zu starten? In welchem Verzeichnis rufst Du was auf und wo liegt die class Datei der Klasse?

Da die Anzeige mit / angezeigt wurde, wäre eine Vermutung, dass Du es nicht richtig angegeben hast. Package/Klasse werden mit . angegeben. Also ein Aufruf wäre z.B.
java de.vektorspiel.Vektorspiel
und kein
java de/vektorspiel/Vektorspiel

Wobei dies voraussetzt, dass dann die Datei Vektorspiel.class im Verzeichnis ./de/vektorspiel/ zu finden ist.
 
Wie genau versuchst Du es denn zu starten? In welchem Verzeichnis rufst Du was auf und wo liegt die class Datei der Klasse?

Da die Anzeige mit / angezeigt wurde, wäre eine Vermutung, dass Du es nicht richtig angegeben hast. Package/Klasse werden mit . angegeben. Also ein Aufruf wäre z.B.
java de.vektorspiel.Vektorspiel
und kein
java de/vektorspiel/Vektorspiel

Wobei dies voraussetzt, dass dann die Datei Vektorspiel.class im Verzeichnis ./de/vektorspiel/ zu finden ist.
Ich habe es mit "java Vektorspiel" gestartet.
 
Du hast leider noch nicht die Frage beantwortet, wie die Verzeichnisstruktur aussieht und wo die Dateien liegen.

Wenn Du auf der Kommandozeile mit möglichst wenig Argumenten etwas übersetzen und ausführen willst, dann muss es so aussehen:

Du hast ein Projektverzeichnis (egal wo) und bist mit der Eingabeaufforderung (Oder dem Terminalfenster) in diesem Verzeichnis.

Dann hast Du das Verzeichnis de, in dem ist das Verzeichnis vektorspiel.
Dort findet sich dann Vektorspiel.java
Übersetzt wird das dann per
javac de\ vektorspiel\Vektorspiel.java
(Bei Mac / Linux bitte die \ durch / ersetzen!)

Danach solltest Du in dem Verzeichnis de\vektorspiel die Datei Vektorspiel.class sehen.

Der Aufruf kann dann per
java de.vektorspiel.Vektorspiel
erfolgen. Ob Du in dem richtigen Verzeichnis bist, kannst Du per
dir de\vektorspiel
bzw.
ls -l de/vektorspiel
bei Mac/Linux prüfen. Der Befehl muss die java und class Datei zeigen.

Sollte dies alles der Fall sein und die Klasse wird nicht gefunden, dann kann es daran liegen, dass Du einen CLASSPATH gesetzt hast (z.B. Umgebungsvariable). Dann ersetzt dieser den Default Classpath, der das aktuelle Verzeichnis enthält. Dann wäre der Aufruf
java -cp . de.vektorspiel.Vektorspiel
ein Verusch wert.

Generell bitte einfach den Text des Terminal-Fensters kopieren, damit wir den Aufruf und das Ergebis sowie den Pfad und die Ausgabe des dir oder ls Befehls sehen können ..
 
Ich habe bei mir einfach nur einen Ordner Vektorspiel und in diesem Ordner dann auch kompiliert.

Als Betriebssystem benutze ich Linux.

Ordnerstruktur ist bei mir $HOME/Dokumente/Java/Vektorspiel.
Und in dem Ordner Vektorspiel habe ich es auch kompiliert.

Ich werde es morgen früh mal ausprobieren mit $HOME/Dokumente/Java/de/vektorspiel und dann melde ich mich noch mal.

Danke schön mal.
 
Du kannst es auch ohne diese Verzeichnisstruktur machen, aber da de Pfade mit dem Package übereinstimmen müsse, wäre die Klasse dann im Default Package, d.h. die package Zeile müsste ganz gelöscht werden.

Die Aufrufe wären dann nur noch:
javac Vektorspiel.java
java Vektorspiel
(Direkt bei der Datei, d.h. ein ls zeigt die java Datei und nach dem übersetzen auch die class Datei.)
 
Hi.
Verwendest du zufälligerweise Netbeans?

Wenn Ja:
Versuch mal folgende Datei zu löschen, neu zu builden und dann zu starten:
ProjektVerzeichnis/build/built-jar.properties
 

Zurück
Oben