[SWT] Image über einen relativen Pfad laden

SNOWMAN-X

Mitglied
Hallo,

ich will für mein Programm ein Logo und ein eigenes AppIcon laden.
Code:
Image srLogo = new Image(mainDisplay, "D:/Programme/eclipse/Workspace/ShadowRun/src/Shadowrun_logo.gif");
Aber das ganze soll später als JAR Datei auf den verschiedensten Kisten laufen, sollte der Pfad ja doch irgendwie auch relativ sein.
Nur irgendwie bekomm ich das nicht hin.

Mit
Code:
Image srLogo = new Image(mainDisplay, "Shadowrun_logo.gif");
Image srLogo = new Image(mainDisplay, "./Shadowrun_logo.gif");
Image srLogo = new Image(mainDisplay, "../Shadowrun_logo.gif");
bekomme ich nur die Meldung, dass die Datei nicht gefunden wurde.

Da ich gerade erst angefangen hab, mir Java selber bei zu bringen, hab ich auch keine wirkliche Idee, wie ich da weiterkommen kann.

Ist es überhaupt möglich, Bilder über relative Pfade zu laden? Und wenn ja, wie macht man das dann?
 
Hallo,

für einen relativen Pfad nimmst du am Besten Class.getResource, also

Code:
Image srLogo = new Image(mainDisplay,getClass().getResource("src/Shadowrun_logo.gif"));

das ist dann der Pfad relativ zu der aktuellen Klasse.
 
Hallo,

habe das jetzt mal so ausprobiert, bekomme aber die Meldung:
"Cannot make a static reference to the non-static method getClass() from the type Object".

Normalerweiße hat mir eclipse dann einfach die Option geboten, diese oder jene Variabel/Funktion als "static" zu deklarieren, aber hier mag eclipse nicht.

Und um ganz ehrlich zu sein, ich kenne "static" nur aus C++ für statische Variablen, hab aber keine Ahnung wie sich das bei Java mit Funktionen und non-static, etc. verhält.

Nagut, ich denke, ich muss da mal im Netz suchen und lernen, dann werd ich schon herausfinden, was ich falsch gemacht habe.

Danke und Grüße
Snowman
 
Hallo,

du befindest dich mit diesem Code innerhalb einer statischen Methode... da gibts kein this und deshalb klappt das auch mit getClass() nicht (implizit steht da ja auch this.getClass()). Du musst hier also die Klasse qualifizieren, Bubu.class.getResource(..) um realtiv zu ihr Ressourcen laden zu können.

Gruß Tom
 
Hallo,

ok, das hab ich nun auch probiert:
Code:
Image srLogo = new Image(mainDisplay, PlayerGUI.class.getResource("Shadowrun_logo.gif").toString());
Was aber zu folgender Fehlermeldung führt:
Code:
Exception in thread "main" org.eclipse.swt.SWTException: i/o error (java.io.FileNotFoundException:
file:\D:\Programme\eclipse\Workspace\ShadowRun\bin\de\aphol\Shadowrun_logo.gif
(Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch))
Copy + Paste von dem angegeben Pfad in den Browser und ich sehe das Bild.
Also der Pfad stimmt, nur irgendwas passt da trotzdem noch nicht ganz.

Ich hab absolut keine Idee, wie man da jetzt weiterkommt.
 
Hallo,

also wenn das Bild im Verzeichnis images/bubu.png innerhalb des Jars liegt kannst du wie folgt darauf zugreifen:
Java:
Image image = new Image(Display.getDefault(),Bubu.class.getClassLoader().getResourceAsStream("http://www.tutorials.de/forum/images/bubu.png"));

Gruß Tom
 

Neue Beiträge

Zurück