kann Klassen aus eigenem Package nicht verwenden

  • Themenstarter Themenstarter guni
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

guni

Gast
Hallo,

habe folgendes Problem:

habe 2 Klassen (KlasseA, KlasseB) die beide im gleichen Paket (Paket) liegen.
Klasse A ruft KlasseB auf.
Leider kommt dabei jedes Mal ein Fehler, dass KlasseB nicht gefunden werden kann (obwohl die Datei im gleichen Ordner liegt!)
wenn ich die Package-Zeilen in beiden Dateien auskommentiere, dann funktioniert das Ganze problemlos.

Bitte um Hilfe!

lg guni
Code:
package Paket;

public class KlasseA {
	public static void main(){
		KlasseB ObjektB = new KlasseB();
		System.out.println("Ich bin die Klasse A");
	}	
}
---------------------------------------------
Code:
package Paket;

public class KlasseB {
	public static void KlasseB(){
	}
	public void msg(){
		System.out.println("Ich bin Klasse B");
	}
}
----------------------------------------------
der Fehler:

C:\cdb\meine_sources\javaneu\packagetest>javac KlasseA.java
KlasseA.java:5: cannot find symbol
symbol : class KlasseB
location: class Paket.KlasseA
KlasseB ObjektB = new KlasseB();
^
KlasseA.java:5: cannot find symbol
symbol : class KlasseB
location: class Paket.KlasseA
KlasseB ObjektB = new KlasseB();
 
Heißt der Ordner zufällig nicht "Paket"?

Noch ein kleiner Hinweis: Paketnamen schreibt man klein. Variablennamen ebenso.
 
ich habe schon probiert, den ordner paket zu nennen, macht aber keinen unterschied!

danke für den hinweis mit variablennamen, paketnamen - ich werds mir merken 😎

lg, guni
 
Probier mal "javac *" oder "javac paket/*". Ich hab lange nicht mehr an der Kommandozeile kompiliert.
 
hmm ....
ja - jetzt funktioniert das complien ohne Fehler.
Aber ausführen kann ich die Datei dann trotzdem nicht.

ich erhalte einen Fehler:

C:\cdb\meine_sources\javaneu\Paket>java KlasseA
Exception in thread "main" java.lang.NoClassDefFoundError: KlasseA (wrong name:
Paket/KlasseA)
[...]

ich bin ziemlich neu in Java, aber das Ganze wirkt so, als würde Java nach einer KlasseA im UNTERORDNER Paket suchen ... ich habe aber beide Dateien im gleichen Ordner! Ich will (derzeit noch) gar nicht in Unterordner abschweifen!

lg
 
du musst das hier stehen haben:
C:\cdb\meine_sources\javaneu>java Paket.KlasseA


> Ich will (derzeit noch) gar nicht in Unterordner abschweifen

ohne Unterordner auch keine packages!
 
@guni: Es ist gut, dass Du auf der Kommandozeile anfängst. Aber wenn es hier einigermaßen läuft, solltest Du auf eine IDE umsteigen.
 
Hallo.

habe den Aufruf mit

java Paket.KlasseA

probiert. Geht immer noch nicht:

liefert folgenden Fehler:

Exception in thread "main" java.lang.NoClassDefFoundError: Paket/KlasseA

hab mal einen Tree auf den übergeordneten Ordner gemacht, damit ihr euch ein Bild von meiner Umgebung machen könnts:

C:\cdb\meine_sources>tree /A
Auflistung der Ordnerpfade
Volumenummer: 00000073 C88B:333A
C:.
+---javaneu
| +---base
| | \---counting
| +---Paket
| \---res
\---meine_classes

mein javac / java rufe ich im Ordner Paket auf. Ein dir auf den Ordner zeigt folgende Dateien:

C:\cdb\meine_sources\javaneu\Paket>dir
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: C88B-333A

Verzeichnis von C:\cdb\meine_sources\javaneu\Paket

17.01.2008 14:54 <DIR> .
17.01.2008 14:54 <DIR> ..
17.01.2008 14:25 494 KlasseA.class
17.01.2008 13:39 191 KlasseA.java
17.01.2008 14:25 453 KlasseB.class
17.01.2008 13:39 147 KlasseB.java
4 Datei(en) 1.285 Bytes
2 Verzeichnis(se), 61.770.244.096 Bytes frei

kann damit irgendwer was anfangen?!?!

lg,
 
@tfa ... ich habe mal mit eclipse angefangen (größere Projekte im sourceforge ausgecheckt) ...
aber das ganze war mir total unsymphatisch weil ich nicht mehr die Kontrolle über das gehabt habe, was im Hintergund alles gemacht / erstellt wird ...
deswegen bin ich jetzt darauf umgestiegen, alles aus der cmd heraus zu starten und ggf. schreibe ich mir batchdateien in denen ich den classpath richtig setze ...

lg,
 
> habe den Aufruf mit

> java Paket.KlasseA

> probiert. Geht immer noch nicht:

hast du ihn auch vom Verzeichnis C:\cdb\meine_sources\javaneu aus ausgeführt, wie ich es geschrieben habe?
(war natürlich nicht leicht zu sehen)


edit:
tree /A
ist nett, kannte ich noch gar nicht 😉
 
@slaterB:

du hast recht ... das hab ich übersehen ;-)
ja. so geht's!

aber was, wenn meine Ordnerstruktur komplizierter wird. In Wirklichkeit habe ich nämlich einen Base-Ordner in dem ich alle Klassen ablege, die mir irgendwie wichtig erscheinen (Worte eines Anfängers).
im darüberliegenden Ordner habe ich dann mein eigentliches Hauptprogramm.
Jetzt habe ich im Base-Ordner eine Counter.class, die ich sowohl von anderen Klassen aufrufen möchte, die auch im base-package dabei sind, als auch von meinem Hauptprogramm im darüberliegenden Ordner!
Wie löse ich das???

PS.:
vom Prinzip her ist der packagename ja immer gleich dem Ordnernamen, in dem die Klasse liegt, oder?
d.h.
wenn ich eine Ordnerstruktur

C:\cdb\meine_sources\javaneu\Hauptordner>tree /A
Auflistung der Ordnerpfade
Volumenummer: C88B-333A
C:.
+---Unterordner1
| +---UnterordnerA
| \---UnterordnerB
\---Unterordner2

Habe, dann haben alle Klassen ...
... in Unterordner1 den Packagenamen Unterordner1
... in Unterordner2 den Packagenamen Unterordner2
... in UnterordnerA den Packagenamen UnterordnerA
... in UnterordnerB den Packagenamen UnterordnerB

ABER:
die Klassen in UnterordnerA werden
... von Klassen, die im gleichen Verzeichnis liegen gar nicht importiert
... von Klassen, die im Unterordner1 liegen mit import UnterordnerA.Klassenname importiert
... von Klassen die im UnterordnerB liegen können sie nicht importiert werden
... von Klassen im Hauptordner mit import Unterordner1.UnterordnerA.Klassenname importiert

stimmt das?!

tree /A
ist nett, kannte ich noch gar nicht

jaja - ich hab auch ewig gebraucht und alle möglichen Treeprogramme im Netz durchprobiert, bis ich rausgefunden hab, dass das standardmäßige DOS einen /A-Switch hat um da eine vernünftige Darstellung zu erhalten :lol:
 
> Jetzt habe ich im Base-Ordner eine Counter.class, die ich sowohl von anderen Klassen aufrufen möchte, die auch im base-package dabei sind, als auch von meinem Hauptprogramm im darüberliegenden Ordner!
> Wie löse ich das???

du hörst auf das zu tun, mit jar-Archiven kann man sowas machen, allgemein halte dich aber an die package-Struktur


-----------

> die Klassen in UnterordnerA werden
> ... von Klassen, die im gleichen Verzeichnis liegen gar nicht importiert

klappt

> ... von Klassen, die im Unterordner1 liegen mit import UnterordnerA.Klassenname importiert

falsch, mit import Unterordner1.UnterordnerA.Klassenname
wie auch von allen anderen packages aus
(X)

> ... von Klassen die im UnterordnerB liegen können sie nicht importiert werden

doch, siehe (X)

> ... von Klassen im Hauptordner mit import Unterordner1.UnterordnerA.Klassenname importiert

richtig, siehe (X)
 
"aber was, wenn meine Ordnerstruktur komplizierter wird"

eine IDE nehmen.

2000 klassen in 500 verzeichnisse, mit keine ahnung wie viele tausende zeilen code.....

wer sich seine package ... und import ... selber schreibt, ist selber schuld! da wirds lustig wenn er mal ein ganzes package verschieben muss!
 
Ok ... welche IDE würdet ihr empfehlen?

Ich habe mich mal ein bisschen mit Eclipse gespielt, aber ich habe den Eindruck, dass das endlos kompliziert ist ...
Wollte irgendeine Datei importieren, habe den Classpath entsprechend modifiziert und dann is nix mehr gegangen!

also - was würdet ihr empfehlen?

lg,

@SlaterB ... danke für deine Erklärung - jetzt ist mir das Ganze um einiges klarer!
 
habe mir eclipse jetzt mal eingerichtet und nochmal einen Versuch gestartet.
Ich stehe noch ganz am Anfang aber ich muss sagen, dadurch, dass ich in JAVA jetzt schon ein bisschen was gemacht habe (über die Commandline) und so zumindest ansatzweise das Prinzip durchschau (ich komm eigentlich noch aus der strukturierten Programmierung und auch in Perl war die objektorientierung eher ... na ja - nix gegen Perl, aber da is Java schon ein bisschen anders) versteh ich jetzt auch Eclipse schon ein bisschen besser und solche Auto-Korrekturen sind für mich als Anfänger auch nicht schlecht!

lg, guni
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben