• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Eclipse/packages aendern

-yoyo-

Gast
Hallo,

ich habe ein Problem mit Eclipse, ich habe ein Programm geschrieben, bestehend aus 6 Klassen. Alles ist wunderbar gelaufen. Jetzt wollte ich das package aendern. habe also ueber jede Klasse package xyz; geschrieben.
Wenn ich das Programm jetzt compiliere&ausfuehre bekomme ich folgende Fehlermeldung

"Exception in thread "main" java.lang.NoClassDefFoundError: Main"

Main.java ist die Klasse die die main methode enthaelt.

Ich nehme mal an, dass ich eventuell den Klassenpfad oder so aendern muss, habe beim googlen leider auch nichts gefunden und hoffe mal, dass mir hier jemand helfen kann.

Danke schonmal

-yoyo-
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Datei-/Packagename und Klassenname müssen doch bei Java übereinstimmen, oder irre ich mich da?
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Beim Ausführen erwartet Java, dass die Klassen innerhalb eines Packages auch physikalisch in einem gleichnamigen Ordner liegen, sowie dass die Ausführung unterhalb dieses Ordners stattfindet. Konkret: Hast Du eine Klasse "Bla.class" in einem Package "blubb", muss die auch in einem Ordner "blubb" liegen und die Ausführung via "java blubb/Bla" ablaufen.
 
Zuletzt bearbeitet:

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
Jein. Du musst die Klassen auch in den Ordner xyz unter source verschieben. Das Package gibt gleichzeitig die hierarchische Ordnerstruktur mit vor. Den Startaufruf musst Du natürlich auch auf 'xyz.Main' machen.

Gruß,

.commander
 

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
quarx schrieb:
"bla.class" in einem Package "blubb", muss die auch in einem Ordner "blubb" liegen und die Ausführung via "java blubb/bla" ablaufen.

;) Warst schneller. Würdest aber sofort vom Stylechecker eins über die Rübe bekommen: niemals, unter gar keinen Umständen, auch nicht in einem Forum, darf man eine Klasse klein schreiben! Das ist pfuipfuipfui! ;)
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
commander schrieb:
;) Warst schneller. Würdest aber sofort vom Stylechecker eins über die Rübe bekommen: niemals, unter gar keinen Umständen, auch nicht in einem Forum, darf man eine Klasse klein schreiben! Das ist pfuipfuipfui! ;)
Jaa, ist ja gut, hast Recht. ;) :p
Das kommt davon, wenn man sich die ganze Zeit nur mit C++ beschäftigt...
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
kleiner Tipp:

Eclipse hat eine Funktion eingebaut, die sich 'Refactor' nennt. Mit ihr kann man Klassennamen, Pakete, Interfaces, Variablennamen und was weiss ich, komfortabel umbenennen. Einfach Rechtsklick (z.B.: über ein Paket, oder Variable) -> 'Refactor' -> 'Rename'. Eclipse ändert dann alle betreffenden Stellen innerhalb des workspace (oder workspaces? o_O ).

c7.
 

-yoyo-

Gast
Danke fuer die Antworten,

besonders das mit dem Refactor ist gut zu wissen. Ich habe schon alle Dateien in dem Verzeichnis projektname/neuerPackageName. Hat aber irgendwie nicht funktioniert. Bei allen anderen Klassen gab es auch kein Problem nur bei der Main-Klasse.

Ich habe dann alle .class files weggeschmissen das Projekt aus Eclipse geloescht und dann neu geladen. Habe noch ein paarmal den Fehler bekommen, als ich versucht habe zu compilieren und auf einmal tat es?! Warum, weiss ich auch nicht.


@.commander

Deine Antwort raffe ich nicht so ganz:
"Du musst die Klassen auch in den Ordner xyz unter source verschieben. Das Package gibt gleichzeitig die hierarchische Ordnerstruktur mit vor. Den Startaufruf musst Du natürlich auch auf 'xyz.Main' machen."

Bin noch nicht so super eclipse Erfahren (fuer die die es noch nicht gemerkt haben :-D )

Kann ich das in Eclipse machen, irgendwie kann ich nichts finden unter "Source" mit dem man die Klassen verschieben kann oder wie man den Aufruf nach xyz.Main aendern kann. Wuerde mich halt schonmal interessieren passiert mir bestimmt oefter ;)

Gruesse

-yoyo-
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
irgendwo in der rechten oberen Ecke findet sich ein Button der sich "Java-Browsing" nennt *klick*. Daraufhin öffnet sich ein Fenster mit Namen "Package-Explorer". Klassen kannst du dann per drag&drop veschieben.

oder wenn du das meintest:

Klasse die Du ausführen möchtest ist im Editor geöffnet. Grüner Pfeil->Run as...->Java-Application.
Wenn da ne main-Methode drinnen ist dann wird sie ausgeführt.

oder kapier ich jetz gar nix mehr? :eek:

c7.
 

-yoyo-

Gast
creative7even

Es funktioniert jetzt (weiss zwar immer noch nicht warum es auf einmal getan hat). Das mit dem Package Explorer und so habe ich schon rausgefunden. Da waren auch von Anfang an, alle Klassen im gleichen Package und alle .java dateien waren im gleichen Ordner. Haette also von Anfang an tun sollen.

Nochmal Danke fuer die Antworten.

-yoyo-
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
-yoyo- schrieb:
@.commander

Deine Antwort raffe ich nicht so ganz:
"Du musst die Klassen auch in den Ordner xyz unter source verschieben. Das Package gibt gleichzeitig die hierarchische Ordnerstruktur mit vor. Den Startaufruf musst Du natürlich auch auf 'xyz.Main' machen."

Bin noch nicht so super eclipse Erfahren (fuer die die es noch nicht gemerkt haben :-D )

Kann ich das in Eclipse machen, irgendwie kann ich nichts finden unter "Source" mit dem man die Klassen verschieben kann oder wie man den Aufruf nach xyz.Main aendern kann. Wuerde mich halt schonmal interessieren passiert mir bestimmt oefter ;)
Ich übernehm das mal eben noch: Das Problem resultiert daraus, dass der Java-Interpreter ("java" im Terminal) erwartet, dass der logischen Verteilung des Quellcodes auf verschiedene Packages auch eine physikalische Verteilung auf entsprechende Ordnerstrukturen zur Seite gestellt wird. Bei der Ausführung von Java-Programmen in Paketen muss man das im Terminal von dem Ordner oberhalb des Packages machen. Benutzt man nun Eclipse als Entwicklungsumgebung, so wird einem die Erstellung der Ordnerstrukturen abgenommen: Eclipse entnimmt sie einfach aus den "package"-Anweisungen und verwaltet den Workspace entsprechend (vor den Augen des Benutzers versteckt). Ändert man jetzt von Hand im Quellcode einige package-Anweisungen, kommt IMHO Eclipse ziemlich durcheinander, das hast Du ja erlebt. Die Umverteilung von einem Package auf andere sollte man stattdessen über das Eclipse-Menü (die erwähnten Refactor-Funktionen) machen, dann kann Eclipse den Workspace konsistent "umformen".
 

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
quarx schrieb:

Danke, genau so hab ich das gemeint!

Ist immer hart, sich ohne konkretes Material abstrakt über solche Probleme zu unterhalten, ohne so in Fachjargon abzudrifften, dass das Gegenüber garnix mehr rafft.

Gruß,

.commander