# Exception in thread "main" java.lang.NoClassDefFoundError: MeineKlasse



## mrbela (10. Okt 2012)

Hallo Leute!

Wenn ihr den Titel dieses Posts lest, rollen sich wahrscheinlich schon Eure Fußnägel hoch, dennoch möchte ich es mal probieren.. 

Ich kann Programme aus Eclipse heraus wunderbar starten.. Alles klappt wie gewohnt.

Möchte ich nun aber das gleiche über die Kommandozeile tätigen ("java MeineKlasse"), kommt oben genannter Fehler?!?

Ich habe die Umgebungsvarialbe PATH richtig gesetzt und auch wenn ich meine Klasse mit "javac" erst compilieren lasse und dann versuche auszuführen, kommt der Fehler... 

Danke für die Hilfe!!


----------



## Mujahiddin (10. Okt 2012)

Bist du sicher, dass der absolute Path angegeben ist?

Ist die Klasse richtig geschrieben (Groß-/Kleinschreibung)?

Ist die Main-Methode richtig deklariert?


----------



## mrbela (10. Okt 2012)

> Bist du sicher, dass der absolute Path angegeben ist?
> 
> Ist die Klasse richtig geschrieben (Groß-/Kleinschreibung)?
> 
> Ist die Main-Methode richtig deklariert?



Kann ich eigtl alles mit "ja" beantworten...

Mein Path sieht wie folgt aus: "C:\jet7.6-eval\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files\Common Files\iZotope\Runtimes;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\Windows Live\Shared;C:\Program Files\MiKTeX 2.9\miktex\bin\;C:\Program Files\Java\jdk1.7.0_04\bin"

Ganz am Ende ist das Java drinnen.

Dann gibts noch ne Umgebungsvariable CLASSPATH: ".;C:\Program Files\Java\jre6\lib\ext\QTJava.zip"



Was hat eigtl dieser Fehler zu bedeuten, bzw. wann wird er ausgelöst?!


----------



## Mujahiddin (10. Okt 2012)

```
C:\Program Files\Java\jdk1.7.0_04\bin
```

Schau mal nach, ob dieser Pfad existiert.

Die neueste Version von JDK ist 7u7 soweit ich weiß - das heißt, wenn du ein Update draufgespielt hast, ist der PATH ungültig.


```
NoClassDefFoundError
```
 wird ausgelöst, wenn zur Laufzeit die Klasse nicht gefunden wird, die zur Compilezeit noch da war.

Gib mal den absoluten Pfad zu deiner Klasse an!
also "java C:\blabla\blabla\bin\MeineKlasse[.class]"

E: okay, so geht's nicht...
Du musst dich in den Pfad reinarbeiten mit 
	
	
	
	





```
cd C:
```
, 
	
	
	
	





```
cd blabla
```
, 
	
	
	
	





```
cd blabla
```
, 
	
	
	
	





```
cd bin
```
 und dann 
	
	
	
	





```
java MeineKlasse
```
...


----------



## Gast2 (10. Okt 2012)

> Gib mal den absoluten Pfad zu deiner Klasse an!
> also "java C:\blabla\blabla\bin\MeineKlasse[.class]"


Das wird nicht funktionieren.

```
java
```
 erwartet nicht den Pfad zur Klasse, sondern denn vollqualifizierten Klassennamen. Die Klasse muss sich dann (irgendwie) im Classpath befinden.

@TO:
Probier mal folgendes:

```
java -cp . MeineKlasse
```
Falls das funktioniert, dann ist dein ClassPath falsch konfiguriert. Hast du an der Umgebungsvariablen mal rumgespielt? Da gehört mindestens der aktuelle Pfad 
	
	
	
	





```
.
```
 mit rein.

Wenn das nicht hilft, dann poste mal was:

```
java -version
```
und

```
javac -version
```
ausgeben.


----------



## mrbela (10. Okt 2012)

Der Pfad existiert! Hatte ihn bevor ich hier gepostet habe gesetzt.. Gerade auch nochmal kontrolliert!

Der genaue Pfad ist der hier:
C:\Users\Armin\workspace_privat\Test\bin\splashscreen


----------



## Mujahiddin (10. Okt 2012)

Daran wird's also liegen.

Du musst 
	
	
	
	





```
cd C:\Users\Armin\workspace_privat\Test\bin\
```
 eingeben, und danach:


```
java splashscreen.MeineKlasse
```

Probier das mal so.


----------



## mrbela (10. Okt 2012)

> Probier mal folgendes:
> java -cp . MeineKlasse
> Falls das funktioniert, dann ist dein ClassPath falsch konfiguriert. Hast du an der Umgebungsvariablen mal rumgespielt? Da gehört mindestens der aktuelle Pfad . mit rein.



Da kommt leider der gleiche Fehler.. 

java -version:
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b11)
Java HotSpot(TM) Client VM (build 23.3-b01, mixed mode, sharing)

javac -version:
javac 1.7.0_04


Danke für Eure Hilfe!!!


----------



## mrbela (10. Okt 2012)

> Daran wird's also liegen.
> 
> Du musst cd C:\Users\Armin\workspace_privat\Test\bin\ eingeben, und danach:
> 
> ...




ES GEEEEEEEEEEHT!!!    
Daaaankeeeeeeee!

Nur musst Du mir jetzt noch erklären, wo mein Fehler war??? Warum muss den Befehl aus dem bin Ordner ausführen und nicht direkt aus dem package-Ordner?


----------



## bone2 (10. Okt 2012)

Mujahiddin wird recht haben, sieht stark danach aus, als ob du das Package geflissentlich ignoriert hast


edit:
weil nur so die ganze package struktur von java erfasst wird.
Die Klasse ist dann nunmal packacke.Klasse nicht mehr nur Klasse. Sobald du mehrere Packages in einem Projekt hast, würde Java die anderen Klassen sonst auch nicht mehr finden.


----------



## mrbela (10. Okt 2012)

Jetzt hab ich noch ne Frage, die mir spontan kommt:

Ändere ich was in Eclipse und klicke auf speichern und rufe dann wieder "java (packagename).MeineKlasse" auf, dann hat er die Ändnerung übernommen.
Muss die Änderung aber eigtl nicht neu kompiliert werden!? Oder macht Eclipse das beim Spiechern?

Danke..!


----------



## Mujahiddin (10. Okt 2012)

Passiert nicht beim Speichern, soweit ich weiß. Kann es aber nicht sicher sagen.

Warum solltest du es denn in Eclipse schreiben und dann außerhalb ausführen??


----------



## bone2 (10. Okt 2012)

Einstellungssache 


Aktiviere einfach: Project > Build Automatically


----------

