Datei im src verstecken

Wundfix

Grünschnabel
Hi,

ich will ein Miniimage im src-Folder(oder ähnlichem) verstecken, so das ich die Datei nicht mit übergeben muss ... so das ich am ende eine .jar generiere und da das Bild schon mit drin ist.

Ich habs mit relativem Pfad versucht und unter Eclipse findet er es auch im src-verzeichnis aber wenn ich es dann generiere sucht er in dem Ordner wo die .jar liegt nach einem src-Verzeichnis :)
 
Hi Wundfix und Willkommen bei Tutorials.de,

wenn du eine Datei aus einer Jar-Datei laden willst, machst du das am besten über getClass().getResource(...). Damit greifst du auf alle Dateien zu, die im selben Package liegen wie die Klasse, in der diese Methode aufgerufen wird. Die Klasse muss ein Objekt sein!

So kannst du dann dein Bild aus der Jar-Datei laden:
Java:
	public Image loadImage(String name) {
		return new ImageIcon(getClass().getResource(name)).getImage();
	}

Gruß

Fabio
 
Dafür würde ich eine andere Vorgehensweise vorschlagen, jedenfalls mache ich das anders und die Vorgehensweise hat schon ihren Sinn...

Und zwar mache ich das so:
Ich habe immer ein Package names res (für resources, der Name ist aber eigentlich egal) und darin sind dann weitere Sub-Packages wie images, langs, help, ..., in welche dann eben die entsprechenden Files rein kommen. In dem Package res habe ich immer eine Klasse namens ResLoader. Die Klasse hat keine Implementierung, sie dient quasi nur als Referenz.

Die Bilder usw kann man dann ganz leicht anhand der Klasse ResLoader laden. Wie man die Dateien lädt, ist immer von der Anwendung der Datei abhängig, aber hier mal als Stream.
Java:
InputStream in = ResLoader.class.getResourceAsStream("subpackage/datei");
Ich habe das schon ne Weile nicht mehr benutzt, ist daher grad so ausm Kopf gegriffen. Falls es nicht klappt, einfach sagen, dann bastel ich das flot nach.

Ich hab mir das mal so ausgedacht, weil das mit getClass()... einfach Mist ist, denn wenn mehrere Klassen die Ressourcen brauchen, dann ist der Pfad immer ein anderer. Deshalb über eine leere Klasse das ganze zentralisieren und kann immer die selben Pfade benutzen ohne Angst haben zu müssen, dass es irgendwo knallt.
 
Hi Fabio,

danke für die schnelle antwort :)

ich hab das mal so umgesetzt. allerdings bringt er mir jetzt die Meldung "Unknown Source"

Code:
Image image = new ImageIcon(getClass().getResource("src/Minilogo.GIF")).getImage();
frame.setIconImage(image);
´

Das Bild Minilogo.GIF liegt im src-Verzeichnis
 
ok danke ... Akeshihiro hat mich auf den richtigen Weg gebracht :) muss dann natürlich das Bild zu der entsprechenden Klasse schieben.
Dein ResLoader ist an sich ne gute Idee ... allerdings brauch ich das Bild ja nur bei der GUI und das ist eh alles in einem Package :)

Danke Leute
 
Ja gut, wenn du eh alles in einem Package hast... Ich habe immer mehrere, eigentlich grundsätzlich, daher mach ich das eben so.
 
Zurück