# Alternative zu getClass().getResourceAsStream() ?



## ich_wills_wissen (24. Mai 2006)

Hallo zusammen 

Habe gerade endlich den Grund dafür gefunden, warum meine Anwendung, die in einem Jar steckt 
(Plugin für ne rcp-anwendung) nicht funktioniert:

Ich lade mittels 


```
Buchenbg = new Image(Display.getCurrent(), getClass().getResourceAsStream("/rat2/bild.jpg"));
```

ein Bild, welches ich später auf einen Tabreiter klatschen will.
Wenn ich die Anwendung aus Eclipse heraus starte funktioniert alles super.
Aber wenn das ganze aus dem jarfile gestartet wird fliegt eine Exception, nämlich:



> java.lang.IllegalArgumentException: Argument cannot be null



Der Fehler kommt auch, wenn ich stattdessen 


```
Buchenbg = new Image(Display.getCurrent(), getClass().getResourceAsStream("bild.jpg"));
```

schreibe. 
Das Jar-file sieht so aus:

[...]
rat2/bild.jpg
[...]
rat2/pane1/views/klasseDieDasBildHabenWill.class


An dem Display.getCurrent() kann es nicht liegen, das benutze ich auch schon weiter oben im Code
und da fliegt keine Exception..

Irgendeine Idee wie ich an meine Bilder komme ?  ???:L 


Beste grüße,

ich_wills_wissen  :###


----------



## SebiB90 (24. Mai 2006)

1. kontrollier immer besser was null ist per print
2. du musst den pfad relativ zum pfad der class datei angeben, also ../../bild.jpg


----------



## ich_wills_wissen (24. Mai 2006)

Hallo SebiB90,

danke für Deine Antwort.
Leider funktioniert das ganze aber auch so nicht:


```
Buchenbg = new Image(Display.getCurrent(), this.getClass().getResourceAsStream("../../bild.jpg"));
```

this.getClass() liefer nicht null zurück..   :shock: 

Das muss doch irgendwo herkommen... 

Das ist der Codebereich, in dem die Exception fliegt:



```
try
	    {
	    Buchenbg = new Image(Display.getCurrent(), this.getClass().getResourceAsStream("../../buchen_TabItem_klein.jpg"));
		Resourcesbg = new Image(Display.getCurrent(), this.getClass().getResourceAsStream("../../Objekte_TabItem_klein.jpg"));
		Reservedbg = new Image(Display.getCurrent(), this.getClass().getResourceAsStream("../../Reserved_TabItem_klein.jpg"));	
		Confirmationbg = new Image(Display.getCurrent(), this.getClass().getResourceAsStream("../../Confirmation_TabItem_klein.jpg"));
		Configurationbg = new Image(Display.getCurrent(), this.getClass().getResourceAsStream("../../Configuration_TabItem_klein.jpg"));
	    }
	    catch(Exception e)
	    {
	    	Logger.getInstance().log(this.getClass().toString());
	    	Logger.getInstance().log(e.toString());
	    }
```

Die Namen der jpg Dateien habe ich gerade nochmal überprüft, alles exakt richtig (case sensitive).

hmm...


----------



## ich_wills_wissen (24. Mai 2006)

ich prüf gerade nochmal this.getClass().getResourceAsStream("../../buchen_TabItem_klein.jpg")
etc.. moment..


----------



## ich_wills_wissen (24. Mai 2006)

okay, hier kommt das null her:

hab folgendes geprüft:

	    	if(this.getClass().getResourceAsStream("../../buchen_TabItem_klein.jpg")
	    	if(this.getClass().getResourceAsStream("../../Objekte_TabItem_klein.jpg")
	    	if(this.getClass().getResourceAsStream("../../Reserved_TabItem_klein.jpg")
	    	if(this.getClass().getResourceAsStream("../../confirmation_TabItem_klein.jpg")
	    	if(this.getClass().getResourceAsStream("../../Configuration_TabItem_klein.jpg")

das if ist jedesmal true, d.h. null.
Sicher, daß das mit dem Pfad relativ ist ? 
Aus Eclipse heraus hat es ja auch so wie ich es urpsürnglich geschrieben hatte (rat2/meinbild.jpg) 
funktioniert.

Sehr merkwürdig..

Sonst noch eine Idee woran das liegen könnte ?


----------



## Wildcard (24. Mai 2006)

```
Buchenbg = new Image(Display.getCurrent(), getClass().getResourceAsStream("/rat2/bild.jpg"));
```
Diese Version hätte eigentlich funktionieren sollen.
Hast du mal überprüft ob die Bilder auch wirklich im generierten jar file liegen?


----------



## Dominicana (25. Mai 2006)

Also ich hole mir meine Bilder immer so :

```
ImageIcon deImg = new ImageIcon(hp.FrameRechts.class.getResource("Deutschland.gif"));
```
Dabei liegen die Bilder immer im selben Verzeichnis, wie die Class. Hier z.B "xyz.jar/hp/Deutschland.gif". "FrameRechts" ist in dem Fall der Name der Klasse, welche unter "xyz.jar/hp/FrameRechts.class" gespeichert ist.


----------



## Wildcard (25. Mai 2006)

Dominicana hat gesagt.:
			
		

> Dabei liegen die Bilder immer im selben Verzeichnis, wie die Class. Hier z.B "xyz.jar/hp/Deutschland.gif". "FrameRechts" ist in dem Fall der Name der Klasse, welche unter "xyz.jar/hp/FrameRechts.class" gespeichert ist.


Nur ist es eben nicht unbedingt wünschenswert Resourcen und Klassen im selben Verzeichnis zu speichern. 
Ausserdem scheint ich_wills_wissen's Code auf den ersten Blick korrekt zu sein, daher die Frage ob die Bilder auch wirklich mit in das jar verpackt wurden und Eclipse nicht nur die class Dateien exportiert hat.


----------



## 8ull23y3 (25. Mai 2006)

Öffne mal dein Jar-File mit einem Packer alá WinRar oder ähnlichem und schau mal nach ob da deine Bildchen mit drin sind. Das ist das was Wildcard meinte.


----------



## ich_wills_wissen (26. Mai 2006)

Hallo zusammen,

vielen Dank erstmal für die Vielen Antworten.
Die Bilddateien sind in dem jar-file enthalten (hatte ich ja weiter oben geschrieben)



> Das Jar-file sieht so aus:
> 
> [...]
> rat2/bild.jpg
> ...




Mit ist vorhin aufgefallen, daß das Laden von Bildern aus einer anderen Klasse heraus funktioniert,
und zwar mit einer absoluten Pfadangabe "/rat2/Bilddatei.jpg".

Ich habe gerade nochmal ein wenig herumprobiert und wenn ich ein this vor das getClass()...
schreibe funktioniert das ganze:


```
Reservedbg = new Image(Display.getCurrent(), this.getClass().getResourceAsStream("/rat2/Reserved_TabItem_klein.jpg"));
```

Das ganze finde ich jetzt zwar ein wenig verwirrden, da this.getClass() eigentlich in meinem Falle das 
selbe ist wie getClass() aber gut.. ich bin jetzt erstmal froh, daß es überhaupt läuft,
auch wenn ich noch nicht ganz verstehe warum...

Vielen Dank aber auf jeden Fall für eure ausdauernde Hilfe !!!   
Ihr habt mir die richtigen Impulse gegeben, sonst wär ich wahrscheinlich nicht auf die Idee gekommen.

Beste Grüße,

ich_wills_wissen  :###


----------

