# eigene packages bzw klassen verwenden



## javalerner86 (26. Apr 2012)

Hallo zusammen,

jetzt hab ich den einige stunden darauf verwendet, um über google und diesem forum zum genannten thema etwas brauchbares zu finden und ich versteh ich immer noch nicht wieso es bei mir nicht funktioniert. Also:
Ich mach mal allgemeiner, vllt hilft das eher:
Ich habe eine Klasse A gegeben, die im package PackageA liegt. Dort sind nun Methoden methodeA, Variablen variableA und so weiter. Die Java Datei dazu heißt JavaA.java. Nun möchte ich in einer neuen Datei JavaB.java die Klasse A importieren. 
Demnach müsste ich "import JavaA.*;" einfügen, wenn beide Java dateien in einem ordner sind, oder wenn ich die JavaA.java in einem Unterordner FolderA hab, dann müsste ich "import Folder.JavaA.*;" hinschreiben.
Soweit habe ich das verstanden. I-wie gibt es tausend möglichkeiten. Diese möglichkeit funktioniert leider nicht. ich bekomme dann die fehler meldung error: package **** does not exist
Ich habe nach der fehler meldung gesucht und leider auch nichts brauchbares gefunden um mein problem zu lösen. Vielen Dank für die Hilfe im Voraus.


----------



## Final_Striker (26. Apr 2012)

Zeig mal die Ordnerstruktur wie deine Javadateien abgelegt sind.


----------



## E99 (26. Apr 2012)

Versuchs doch mal mit 

import PackageA.KlasseA;

Ich bin auch noch nicht so lange bei der Sach, aber ich glaube ohne package angabe funktioniert das nicht...

das sagt auch der Fehler...


----------



## javalerner86 (26. Apr 2012)

Ordner1: darin sind JavaB.java und der ordner FolderA. In dem FolderA ist die Datei JavaA.java
oje ich seh gerade, dass ich die bezeichnung oben was verkehrt gemacht hab (weil kein JavaB.java vorkommt) ist das so verständlich?


----------



## javalerner86 (26. Apr 2012)

@E99

das habe ich gerade auch ausprobiert, es gibt die gleiche fehlermeldung aus...


----------



## Volvagia (26. Apr 2012)

Klassen im selben Package (und java.lang) müssen nicht importiert werden.
Es ist imho überhaupt nicht verständlich, ein Bild würde wohl sehr viel mehr helfen.


----------



## javalerner86 (26. Apr 2012)

@Volvagia

ein bild wovon? ausgabe, oder programm? wobei, ich das mit dem programm absichtlich im orignal nicht reinstelle, weil ich ja was lernen will und daher das allgemein gefasst habe


----------



## ich-andreas-ich (26. Apr 2012)

Sind beide Klassen im gleichen Ordner, dann muss keine Import-Anweisung angegeben werden. Wurde aber hier schon erwähnt.

Sind sie nicht im gleichen Ordner, funktioniert ein Import nicht, wenn man im default-Ordner ist.

Etwas lernen ist löblich, aber hilft nichts, wenn die Frage bzw. die für eine Antwort benötigten Informationen für andere nicht verständlich ist, so dass keiner helfen kann.


----------



## Volvagia (26. Apr 2012)

Weder, noch. Explorerfenster im Ordner mit ausgeklappten "Ordner"-Tree.


```
src
	ordnerA
		orderB
			KlasseB
		KlasseA
```

Hier musst du KlasseB in KlasseA mit


```
import ordnerA.ordnerB.KlasseB;
```

oder


```
import ordnerA.ordnerB.*;
```

importieren.

Packageangaben genauso:

Klasse A:


```
package ordnerA;
```

Klasse B:


```
package ordnerA.ordnerB;
```


----------



## javalerner86 (26. Apr 2012)

@Volvagia

Wäre das von der grundstruktur richtig? 
ErstesProgramm (entspricht KlasseA bei dir(genau den Ordnerbaum hab ich))
//im Ordner .../Ordner1/FolderA
package PackageA;

public class JavaA{

	Methoden...

	Varibalen...

	public static void main.....

}

ZweitesProgramm (entspricht klasse B)
// im Ordner ..../Ordner1
import Ordner1/FolderA.JavaA;

public class JavaB{

	Methoden...

	Varibalen...

	public static void main.....

}

das funktioniert bei mir i-wie nicht


----------



## javalerner86 (26. Apr 2012)

@ich-andreas-ich

sorry, sorry, daran hab ich nicht, hab wohl zu viel infos für euch rausgenommen


----------



## Volvagia (26. Apr 2012)

javalerner86 hat gesagt.:


> sorry, sorry, daran hab ich nicht, hab wohl...


Ganz zu schweigen von ganzen Wörtern. 

So wie ich das sehe ist es garnicht richtig. Einerseits werden Packages per Dot getrennt, sie sollen eine verkehrte Domaine darstellen (siehe meine Signatur), außerdem scheinst du mit Ordner, Folder und Package durcheinandergekommen zu sein. Aber das ist ohne Java-Tag sehr schwer zu lesen.

Anhang -> KlasseA in packageA importiert KlasseB in packageA.packageB und Klasse C in packageC.


----------



## javalerner86 (26. Apr 2012)

uh, jetzt vergesse ich noch ganze wörter=((((


----------



## javalerner86 (26. Apr 2012)

@Volvagia

ok, ich habe nun genau das berichtigt und versucht zu kompilieren. und es spuckt die gleiche fehlermeldung aus. Damit jetzt nicht rätselraten aufkommt, ob ich sonst in meinem programm was falsch gemacht habe: ohne das importieren der eigenen klasse funktioniert das programm fehlerfrei. Auch die eigene Klasse lässt sich ohne probleme kompilieren.

Ich hatte heute nachmittag auch noch überlegt, ob ich an den umgebungsvariablen was vergessen haben könnte, aber wenn ich das getan hätte, könnte ich mein programm ohne das importieren der eigenen klasse nicht kompilieren.


----------



## Volvagia (26. Apr 2012)

Dann zeig doch mal, was du verändert hast und was wo liegt.
Ich weiß auch nicht, was du mit dem "Importieren der eigenen Klasse" meinst? Willst du, dass sich die Klasse selbst importiert? Das ist zwar theoretisch möglich, aber wie ich bereits gesagt habe muss eine Klasse im selben package nicht importiert werden. Und eine Klasse sich selbst schon garnicht. xD


----------



## javalerner86 (26. Apr 2012)

Ordnerbaum (Java ist ein anderer Ordner, also nicht der installierte Ordner. das sollte nicht verwirren, sorry)
Ordner "Java" ( mit Ordner "komma" (mit Klasse komma1) und Klasse Ieee)




Kopf von Ieee.java

```
package Java;

/* import java packages */
import java.io.*;
import java.lang.Math.*;
import komma.komma1;

public class Ieee
{
...
}
```




Kopf von komma1.java

```
package Java.komma;

public class komma1
{
     public int methode1(){....};
     public int zahl;
    ...
}
```

Ieee.java ist mein hauptprogramm. nun möchte ich methode1 aus komma1.java verwenden, dazu muss ich die klasse importieren? korrigier mich bitte, wenn ich totalen mist rede. wie verwenden weiß ich noch nicht, aber das importieren bereitet die probleme.


----------



## Final_Striker (26. Apr 2012)

Verwende bitte Java Tags für Quellcode, steht auch dick und rot über dem Eingabefenster.

*Java™ Quelltext ist bitte in [ JAVA]-Tags zu schreiben: [ JAVA]hier Java Code einfügen[/ JAVA]*


----------



## javalerner86 (27. Apr 2012)

Keiner eine Idee?...

Vllt stelle ich die Frage mal was anders: Wie benutzt ihr Methoden aus einer anderen Klasse in eurem Programm? (Ein Beispielcode wäre dabei sehr hilfreich für mich)


----------



## Volvagia (27. Apr 2012)

So?


```
private static void initServices() {
	//TODO: Read from persistent
	ServerInfo info = new ServerInfo("Mail0", "localhost", 34242, ServerInfo.MAIL_SERVER);
	try {
		info.startService();
	} catch (IOException e) {
		logger.log(Level.INFO, "Service could't start: " + e.getMessage());
	}
}
```


```
public void startService() throws IOException {
	Socket socket = new Socket(host, port);
	boolean succefullStart = service.start(serviceName, socket);
		
	if(succefullStart) {
		logger.log(Level.FINEST, "Starting service " + serviceName + " succefull");	
	}
}
```


```
@Override
public boolean start(String name, Socket socket) {
	try {
		SecretKey secretKey = handleEncryption(socket);
		connectionConfig = new CommandConnectionConfig(socket, true, secretKey);
	} catch (Exception e) {
		logger.log(Level.WARNING, "Could not handle encryption, abouting: " + e.getMessage());
		return(false);
	}
		
	new Thread(this, "Service " + name).start();
	return(true);
}
```

Ich würde dir raten zu einer IDE wie Eclipse zu greifen. Denn wenn du jetzt tagelang mit den Packages herumtust wirst du irgendwann die Lust verlieren und mit Java aufhören. Und das wäre schade.


----------



## HimBromBeere (27. Apr 2012)

> Wie benutzt ihr Methoden aus einer anderen Klasse in eurem Programm?


Benötigtes Archiv in den ClassPath eintüten und los geht´s. Der Rest der Vernwendung sieht immer gleich aus: 
	
	
	
	





```
import packageA.supackages.Klasse
```


----------



## javalerner86 (27. Apr 2012)

@Volvagia

so schnell verliere ich die lust nicht, sonst wäre ich nicht so nervend damit, sorry=) und naja ich habe bisher in jeder programmiersprache, die ich verwendet habe, von konsole aus programmiert. 

frage: wie sieht der programmkopf von deinem ersten beispiel aus? wie hast du da die methode ServerInfo importiert?


----------



## Volvagia (27. Apr 2012)

Garnicht, die liegt im selben Package. :bae:

Würde ich sie aber importieren, würde das dann so aussehen:


```
package at.atc.ows.server.mailbox;

import java.io.IOException;
import java.math.BigInteger;
import java.net.Socket;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPublicKeySpec;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

import at.atc.ows.api.SimpleConsoleHandler;
import at.atc.ows.server.api.AbstractWaitForConnectionsThread;
import at.atc.ows.server.api.Command;
import at.atc.ows.server.api.Command.CommandConnectionConfig;
import at.atc.ows.server.api.SslHelper;

import at.atc.ows.server.mailbox.ServerInfo; //<- Hier.

public class MailboxServerMain {
	private static Logger logger;
	
	public static void main(String[] args) {
		initLogger();
		initServices();
//...........
```


----------



## javalerner86 (27. Apr 2012)

aaahhh, ok. vllt pack ich meine beiden dateien besser in dasselbe package, dann brauch ich gar nicht zu importieren. und benutze die methode einfach so, richtig?

oje wie dämlich war mein thread, sorry=(((


----------



## Volvagia (27. Apr 2012)

Ist nicht dämlich.
Mein Projekt besteht laut Windows-Suche aus 168 Java-Dateien. Zwar sicher ein Witz gegenüber dem, was die anderen hier schreiben, aber wenn ich das alles in nur ein Package werfen würde würde ich noch weniger finden als ichs eh schon tue.

Sich mit Packages zu beschäftigen ist zwar wichtig, ich bin aber im Gegensatz zu den meisten anderen der Meinung, dass es nichts bringt sich tagelang mit solchen Sachen aufzuhalten, nicht nur weil es heutzutage fast jede IDE für einem erledigt. Am Anfang müssen gewisse Dinge außenvor gelassen werden, schließlich kann man nur eins nach den anderen tun/lernen. Es gibt nicht viele Leute denen es wirklich Spaß macht sich stundenlang vor dem Compiler zu setzen und Fehler auszumerzen, deshalb finde ich es macht mehr Sinn direkt durchzustarten. Man braucht eben einen Ansporn, und das ist für fast alle das Resultat in Form einer graphischen Ausgabe. Der Umgang mit Packages, Programmieren im Texteditor oder kompilieren per Shell kann man später immer noch lernen bzw. üben.


----------



## Sonecc (27. Apr 2012)

javalerner86 hat gesagt.:


> Kopf von Ieee.java
> 
> ```
> package Java;
> ...



siehe Kommentar im quote


----------



## javalerner86 (28. Apr 2012)

Mein Problem ist gelöst=) ich habs durch ausprobieren und weiterlesen geschafft
und damit diejenigen, die dasselbe problem vllt i-wann auch mal haben, nicht verzweifeln, versuche ich meine lösung zusammen zu fassen.

erstmal vielen Dank an die Personen, die mir anreize, ideen und beispiele gegeben haben, insbesondere Volvagia (es hat richtig spaß gemacht mich mit dir darüber zu unterhalten)=))

Ich programmiere mit texteditor (notepad++) und kompiliere über konsole (Eingabeauffoderung).

Ich setze hier die richtig gesetzten Umgebungsvariablen voraus, die man in anderen foren auch findet. *Des Weiteren solte man bei Classpath noch ";." ergänzen.* Der punkt macht bei mir den unterschied aus, ob das hauptprogramm den unterordner mit der klasse findet oder nicht (prinzipiel heißt der punkt ja, dass das programm von dem ordner aus, in dem man sich in der Eingabeaufforderung befindet, nach der klasse oder dem package sucht, den man importiert hat; z.B. _import ordner1.klasse1;_)

Zusatz:
Wird eine Klasse einem package zugeordnet, dann wird der ordner, in dem sich diese klasse befindet, genauso benannt wie das package.

Die andere Klasse, in dem man eine klasse A einfügt, braucht nicht im selben package zu sein und wird mit _import ordner.A;_ eingefügt.

Das sind soweit meine erfahrungen und die obigen beiträge zusammengefasst.

evt hilfreiche link zum thema pakete und so, sind folgende:
Pakete in Java
[Java] - Klasse einbinden - RR:Board


----------

