# erste Schritte mit Paketen



## paco89 (23. Sep 2012)

hallo, 

ich les mir grad den abschnitt über das thema "Pakete" durch und habe dazu einen ganz einfachen beispielcode abgetippt.


```
package paket1;

 public class PackageTest{

  public static void main (String [] args){
  
    System.out.println("Test der package-Anweisung.");
  
  }



}
```

nun ist mir nicht ganz klar wie ich den kompilieren und ausführen soll.

ich versuche es die ganze zeit mit *javac paket1\PackageTest.java* zu kompilieren und mit *java paket1.PackageTest* auszuführen, aber es klappt irgendwie nicht.
als fehlermeldung erhalte ich immer *ClassNotFoundException*

kann mir da jmd. weiterhelfen?


----------



## Gast2 (23. Sep 2012)

Poste mal die genaue Fehlermeldung, inklusive Stacktrace.


----------



## paco89 (23. Sep 2012)

hier die genaue fehlermeldung:


```
Exception in thread "main" java.lang.NoClassDefFoundError: paket1/PackageTest
Caused by: java.lang.ClassNotFoundException: paket1.PackageTest
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: paket1.PackageTest. Program will exit.
```


----------



## JohannisderKaeufer (23. Sep 2012)

Die Datei PackageTest muß laut Convention in einem Ordner paket1 liegen.


Und dann wird im Verzeichnis in dem der Ordner paket1 liegt, also nicht im Ordner paket1 sondern dem darüberliegenden


```
javac paket1/PackageTest.java
```

und


```
java paket1.PackageTest
```

aufgerufen.


----------



## paco89 (23. Sep 2012)

jo, alles hat prima funktioniert. das mit der CLASSPATH hatte ich nich so ganz verstanden. jetzt weiß ich ungefähr wie das funktioniert. für den anfang reicht es, schätze ich. Ich kann es ja noch vertiefen.



vielen dank für die hilfe.


----------



## paco89 (25. Sep 2012)

hallo, ich habe leider wieder eine frage zu dem thema:

also ich musste zwei klassen schreiben. diese wären: 


```
package paket2;

public class Klasse{

  public Klasse{
    System.out.println("Definition einer Klasse im Verzeichnis paket2");
  }

}
```



```
package paket1;
import paket2.Klasse;

  class KlassenTest{
  
  public static void main(String [] args){
  
    paket2.Klasse kls = new paket2.Klasse();
  
  }


  }
```

zu der aufgabe: 
im ordner* paket1* sollte ein weiteres verzeichnis* paket2* hinterlegt werden. Die Klasse "Klasse" sollte im ordner *paket2* gespechert werden. daher habe ich auch *package paket2; *hingeschrieben.
und die Klasse "KlassenTest" muss im Ordner *paket1 *hinterlegt werden. alles getan.

die Klasse "KlassenTest" soll im Verzeichnis *paket1* übersetzt und ausgeführt werden.


nun mach ich das was ich in meinem obigen beitrag gelernt habe und versuche es mit dem befehl 

*javac paket1/KlassenTest.java 
*

zu kompilieren. aber es geht irgendwie nicht. als fehler kommt das hier raus:

```
javac paket1/KlassenTest.java
paket1/KlassenTest.java:2: package paket2 does not exist
import paket2.Klasse;
             ^
paket1/KlassenTest.java:8: package paket2 does not exist
    paket2.Klasse kls = new paket2.Klasse();
          ^
paket1/KlassenTest.java:8: package paket2 does not exist
    paket2.Klasse kls = new paket2.Klasse();
```

ich versuche es schon seit tagen, aber ich komme nich weiter. kann mir jdm. weiterhelfen?


----------



## Firephoenix (25. Sep 2012)

> im ordner paket1 sollte ein weiteres verzeichnis paket2 hinterlegt werden



Ergibt folgende Ordnerstruktur:

```
paket1
-KlassenTest.java
-paket2
--Klasse.java
```

Imports und Paketnamen werden immer von der Wurzel aus angegeben, die volle Adressierung für Klasse ist also paket1.paket2.Klasse und genauso sieht auch der import aus.
Für einen import a la paket2.Klasse benötigst du diese Ordnerstruktur:

```
paket1
-KlassenTest.java
paket2
-Klasse.java
```

[OT]Mal ne Frage am Rande: Dein erster Thread hier im Hausaufgabenbereich war vom 08.12.2011, also fast 1 Jahr her, seitdem postest du pro Monat 2-3 Threads im Hausaufgabenbereich, wie kommt es das du dich dann immer noch mit Grundlagen wie packages beschäftigst?[/OT]

Gruß


----------



## paco89 (26. Sep 2012)

ich lerne eben langsam. deshalb vtl. dafür ist das forum doch da. um eben fragen zu stellen. 

zu deinem beitrag. ich habe genau dieselbe ordnerstruktur, allerdings funtktioniert das kompilieren nicht.


----------



## Firephoenix (26. Sep 2012)

Du hattest zusätzlich auch noch einen Fehler im Konstruktor von Klasse (runde Klammern vergessen).
Ich hab dir das ganze mal für Windows gebastelt mit einer compile.bat und einer run.bat.
Projekt ist im Anhang als zip.

[TIPP]Wenn du nicht von Schule etc gezwungen bist mit Konsole und Texteditor zu arbeiten und zu compilieren, dann arbeite dich in eine IDE wie Eclipse ein. Da brauchst du 2 Tage um dich dran zu gewöhnen und dannach arbeitest du x mal so schnell weil der ganze Salat wie importe, packagestruktur, formatieren von der IDE wesentlich zuverlässiger erledigt wird als man es selbst kann.[/TIPP]

Gruß


----------

