# Kleines Java-Programm geschrieben, 30 Dateien?



## facilityManager (26. Okt 2008)

Hallo

Ich habe nun ein schickes kleines Java-Programm geschrieben, und möchte es zum Download anbieten. Ich find's aber nicht wirklich cool das die Grafiken einfach so in einem Ordner sichtbar sind und ausgetauscht werden können. Gibt es da einen Trick, das alles in eine einzige Datei zu verpacken? z.B. eine EXE oder ähnliches?? Das brauche ich für Mac, Linux und Windows. Wie macht ihr das?


----------



## maki (26. Okt 2008)

jar, siehe FAQ: http://www.java-forum.org/de/viewtopic.php?t=14970


----------



## DiscoDon (26. Okt 2008)

Normalerweise packt man diese Dateien alle in ein Java Archiv namens Jar. Dies ist dann bei richtiger Konfiguration auch wie eine exe unter Windows mit einem Doppelklick zu starten. Und das beste ist, dass das sogar plattformunhabhängig ist. Such also mal nach einam  Buildbefehl in deiner IDE, zum einfachen Erstellen eines solchen Archivs.

DiscoDon


----------



## facilityManager (26. Okt 2008)

Leider klappt das nicht so recht... wie es aussieht, fehlen in der JAR sämtliche Grafiken und Sounds. Eclipse bietet mir da auch nicht wirklich an, diese hinzuzufügen.

Meine Projektstruktur sieht so aus (im Navigator, Eclipse):


```
PROJEKT
bin (*.class Dateien)
|-pics (viele Bilder)
|-sound (viele Sounddateien)
src (*.java Dateien)
```

Wie bringe ich Eclipse bei, alles außer die *.java Dateien in die JAR zu legen, so das sie ausführbar ist und auch die Grafiken und Bilder enthält? Ich habe keine Packages, weil es nur ein schnelles "quick-and-dirty" Übungsprojekt war...


----------



## Wildcard (27. Okt 2008)

Das kannst du im Export Wizard angeben.


----------



## facilityManager (31. Okt 2008)

Nein, kann ich nicht :-(
RMT auf Projekt > "Export..." > "Runnable JAR File"

Der Wizzard bietet mir keinerlei Setup-Möglichkeit. Vermutlich muss ich vorher irgendwo eine "Launch Configuration" erstellen. Wo macht man das? Die Einstellungen von "Run as..." > "Java Application" bewirken hier nichts, da ich die Einstellung bei "Launch Configuration" nicht anwählen kann. Erscheint nicht zur Auswahl. Sind wohl zwei verschiedene Dinge.


----------



## Beni (31. Okt 2008)

solquery hat gesagt.:
			
		

> Meine Projektstruktur sieht so aus (im Navigator, Eclipse):
> 
> 
> ```
> ...



Im "bin"-Ordner haben Bilder und auch anderes nichts verloren. Der "bin"-Ordner wird von Eclipse erstellt und verwaltet, nicht vom Programmierer. Du kannst die Bilder in jeden anderen Ordner schieben (persönlich verwende ich auch den "src"-Ordner, da die Bilder a) zum Programm gehören und b) so durch "ClassLoader.getResource" geladen werden können)

Im Export-Dialog kannst du dann die Bilder einbinden (Im Menü über File > Export > Java > Jar File). Auf der _zweiten Seite_ kannst du für jede Datei einzeln bestimmen ob sie in das JAR kommt oder nicht.


----------



## facilityManager (31. Okt 2008)

Danke für den Tipp! Nun habe ich die Bilder und Sounds nach src verschoben. Ich habe keine Packages, nur den src und bin Ordner. Im src Ordner befinden sich nun sounds und pics. 

Beim Ausführen als JavaApp in Eclipse fehlen nun die Bilder und Sounds. 

Bisher funktionierte es so:


```
private BufferedImage[] loadPics(String path, int pics) {
		BufferedImage[] anim = new BufferedImage[pics]; //BufferedImage Array in der Größe der Einzelbilder erzeugen
		BufferedImage source = null;
		
		//Bild einlesen
		URL pic_url = getClass().getClassLoader().getResource(path);
		try {
			source = ImageIO.read(pic_url); //Quellbild laden
		} catch (IOException e) {}
		
		//Einzelbilder aus Imagemap raus kopieren und in anim Array legen
		for(int x=0; x < pics; x++) {
			int pWidth = source.getWidth();
			int pHeight = source.getHeight();
			anim[x] = source.getSubimage(x * (pWidth / pics), 0, pWidth/pics, pHeight);
		}
		
		return anim;
	}
```

ein beispielhafter Aufruf aus der main Methode:

```
loadPics("pics" + File.separator + "rocket.gif",8);
```

in den Project Properties ist unter Java Build Path > src > all included. Also demnach eigentlich auch pics und sounds...


----------



## Beni (31. Okt 2008)

Versuch mal einen Refresh (Taste F5) von deinem Projekt, vielleicht sind die Bilder nicht richtig geladen.

Benutze auch "/" anstelle von "File.separator". Laut API muss der Pfad "/" enthalten.


----------



## facilityManager (1. Nov 2008)

Das ist seltsam. File.separator liefert mir zwar einen \ unter Windows XP, aber innerhalb von Eclipse (Run as... Java Application) läuft es damit einwandfrei!

Wenn ich File.separator benutze, funktioniert die exportierte Runnable JAR auf dem Mac!

Wenn ich "/" benutze, funktioniert die exportierte Runnable JAR weder auf Windows noch auf Mac.

Nun habe ich es bei File.separator belassen, allerdings klappt das mit der Runnable JAR immer noch nicht so richtig. Ich kann das Java Programm unter XP nur über die Konsole anschmeißen, wenn ich die JAR entpackt habe.


----------



## Wildcard (2. Nov 2008)

solquery hat gesagt.:
			
		

> Das ist seltsam. File.separator liefert mir zwar einen \ unter Windows XP, aber innerhalb von Eclipse (Run as... Java Application) läuft es damit einwandfrei!


Natürlich, weil ein \ auf Fileebene (Windows Systeme) gültig ist, aber fehl am Platz in einer URL, daher verwende immer nur '/'


----------



## facilityManager (2. Nov 2008)

Danke für den Tipp! Hat mir sehr geholfen


----------



## Heize (9. Dez 2008)

du must jar nicht entpacken versuche es mit java -jar blabla.jar das ist unter Konsole


----------



## Empire Phoenix (26. Jan 2009)

Am Rande die VM scheint nicht so gutmütig zu sein was gross und kleinschreibung angeht, während eclipse dieses scheinbar ignoriert (zumindest bei mir)


----------



## Ebenius (26. Jan 2009)

Empire Phoenix hat gesagt.:
			
		

> Am Rande die VM scheint nicht so gutmütig zu sein was gross und kleinschreibung angeht, während eclipse dieses scheinbar ignoriert (zumindest bei mir)


Ob Dateinamen Groß-/Kleinschreibung unterscheiden hängt vom Dateisystem und damit auch vom Betriebssystem ab. Unter Linux "ignoriert" das Eclipse keines Falles. In JAR-Dateien gibt's Groß-/Kleinschreibung. Man sollte daher *immer* auf Groß-/Kleinschreibung achten.


----------



## Empire Phoenix (30. Jan 2009)

Was ich meinte ist, das Eclispe unter Windows gross/kleinschreibung ignoriert, während es die Vm bei jar's (auch unter windows) nicht tut, böse Fehlerquelle


----------



## Strahli (6. Feb 2009)

Hallo!

Ich hab ein ähnliches Problem .. bei mir werden die Bilder leider auch net angezeigt ... hab versucht eure Bisherigen Tipps anzuwenden .. aber irgendwie ohne erfolg


```
private void init() {
		this.setSize(800, 600);
		this.add(new myPanelStart( (".\\src\\aimages\\HinterStart.jpg"), this));
		this.setResizable(false);//macht das fenster nicht vergrößerbar
		
	}
```

so binde ich die Bilder ein die im Source Ordner im Ordner aimages liegen... funktioniert so auch wunderbar .. 
aber nicht mehr in der Jar ..

ideen? 

Danke Strahli


----------

