Alternative zu getClass().getResourceAsStream() ?

Status
Nicht offen für weitere Antworten.

ich_wills_wissen

Bekanntes Mitglied
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

Code:
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

Code:
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 :###
 
1. kontrollier immer besser was null ist per print
2. du musst den pfad relativ zum pfad der class datei angeben, also ../../bild.jpg
 
Hallo SebiB90,

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

Code:
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:


Code:
	    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...
 
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 ?
 
Code:
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?
 
Also ich hole mir meine Bilder immer so :
Code:
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.
 
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.
 
Ö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.
 
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
[...]
rat2/pane1/views/klasseDieDasBildHabenWill.class


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:

Code:
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 :###
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben