muenzchen: NoClassDefFoundError

Hallo!

Habe folgendes Programm:

import java.lang.*

public class bsp {
  public static void main(String[] args) {
    System.out.println("TEST!!!");
  }
}

Die unkompilierte Datei dazu heißt "bsp.java", lässt sich auch problemlos kompilieren und heißt dann "bsp.class". Wenn ich sie dann aufrufe mit "java bsp" bekomme ich die bekannte Fehlermeldung: Exception in thread "main" java.lang.NoClassDefFoundError: bsp

Ich hab mir echt schon alle Themen dazu durchgelesen, aber es hat nix gebracht. Der Patz ist richtig gesetzt: C:\Programme\JDK\bin

Dahin hab ich auch JDK installiert. Dann habe ich noch versucht den Classpath zu setzen, zuerst auf C:\Programme\JDK\bin dann nur auf C:\ aber das hat alles nichts gebracht.

Ich benutze Windows XP Pro und JDK 1.3.1_01
Ihr seid echt meine letzte Hoffnung!

  1. Hi,

    Habe folgendes Programm:

    import java.lang.*

    public class bsp {
      public static void main(String[] args) {
        System.out.println("TEST!!!");
      }
    }

    Die unkompilierte Datei dazu heißt "bsp.java", lässt sich auch problemlos kompilieren und heißt dann "bsp.class". Wenn ich sie dann aufrufe mit "java bsp" bekomme ich die bekannte Fehlermeldung: Exception in thread "main" java.lang.NoClassDefFoundError: bsp

    Ich hab mir echt schon alle Themen dazu durchgelesen, aber es hat nix gebracht. Der Patz ist richtig gesetzt: C:\Programme\JDK\bin

    Dahin hab ich auch JDK installiert. Dann habe ich noch versucht den Classpath zu setzen, zuerst auf C:\Programme\JDK\bin dann nur auf C:\ aber das hat alles nichts gebracht.

    Der Classpath heißt Classpath, weil er der Pfad für class-Files ist.
    In JDK\bin sind aber keine Klassen, sondern ausführbare Programme (darum sollte dieses Verzeichnis im PATH liegen).

    Der CLASSPATH muß also die Verzeichnisse enthalten, in denen die Klassen liegen.

    Empfehlenswert:
    an den Anfang das Verzeichnis .
    also
    .;c:\blabla

    Andreas

    1. Der Punkt am Anfang bei Classpath bringt auch keine Änderung :(

      1. Der Punkt am Anfang bei Classpath bringt auch keine Änderung :(

        Hallo,

        also mal langsam:

        Die bsp.class liegt im aktuellen Verzeichnis.

        java bsp

        bringt:
        Exception in thread "main" java.lang.NoClassDefFoundError: bsp

        java -cp . bsp

        bringt auch
        Exception in thread "main" java.lang.NoClassDefFoundError: bsp
        ???

        oder wie?

        Gruß

        Axel

        1. java -cp . bsp
          bringt auch
          Exception in thread "main" java.lang.NoClassDefFoundError: bsp
          ???

          Axel! Du bist mein Retter! Warum funktionierts so? Das versteh ich jetzt nicht. Was wird da übersprungen oder auch nicht? Weil java -cp bsp gibt nur eine Liste von Befehlen aus.

          Achja zu dem fehlenden Semikolon. Das ist bei mir drin, hab nur beim Kopieren die erste Zeile vergessen und sie dann im Post händisch hinzugefügt. Dabei muss ich das vergessen haben.

          1. Hallo,

            java -cp . bsp

            Warum funktionierts so? Das versteh ich jetzt nicht.

            Mit -cp <pfad> fügst du den angegebenen Pfad dem classpath hinzu, also
            den Verzeichnissen und Dateien, in denen Java nach deinen Klassen sucht.
            In diesem Fall fügst du das aktuelle Verzeichnis (.) zum classpath hinzu.
            Eigentlich sollte das - wie schon geschrieben - seit Java 2 (also JDK 1.2
            und folgende) nicht mehr notwendig sein, da Java zumindest bei einer
            Standard-Windowsinstallation implizit das aktuelle Verzeichnis, sowie
            die Standard-API-Klassen im classpath hat.

            Da es bei mir auch so funktioniert, muß bei dir ein Konfigurationsproblem
            vorliegen. Evtl. hast du noch irgendwie in der autoexec.bat oder
            einer der anderen Dateien einen classpath gesetzt. (Der wird
            nämlich noch immer verwendet, sofern er vorhanden ist.) Oder aber
            bei deiner Installation der JRE ist etwas schief gelaufen. In diesem
            Fall solltest du die JRE bzw. das SDK nochmal drüberinstallieren.

            Gruß
            Slyh

    2. Hallo,

      Der Classpath heißt Classpath, weil er der Pfad für class-Files ist.
      In JDK\bin sind aber keine Klassen, sondern ausführbare Programme (darum sollte dieses Verzeichnis im PATH liegen).

      Richtig, im PATH sollte das Bin-Verzeichnis liegen.

      Eine CLASSPATH-Variable ist seit Java2 (?) aber nicht mehr notwendig.
      Die Runtime Environment weiß von selbst, wo die API-Klassen liegen und
      fügt außerdem automatisch das aktuelle Verzeichnis zum classpath hinzu.

      Worin der Fehler von muenzchen nun liegt, kann ich aber auch nicht sagen.
      Das oben zitierte Java-Programm ließ sich - bis auf das fehlende
      Semikolon in der 1. Zeile - problemlos kompilieren und anschließend
      ausführen.

      Gruß
      Slyh