Bilder aus externer .jar laden

dvid85

Aktives Mitglied
Hallo,
wie man ein Bild aus einer internen Jar lädt, weiß ich (hoffentlich).
Ich nutze dazu eine Klasse ImageLoader mit statischer Methode:
Java:
public static Image loadWithImageIO(String path, double factor){
		Image img = null;
		try {
			img =  ImageIO.read(new ImageLoader().getClass().getResource(path));
		} catch (IOException e) {
			e.printStackTrace();
		} 
		return scaleImage(img, factor);
	}

Das funktioniert wunderbar, wenn alles in einer jar verpackt ist.

Nun möchte ich aber plugin-mäßig jars laden, die alle eigenständige programme sind, aber von einem hauptprogramm verwaltet werden. funktionier auch alles so weit.

Nur die Bilder läd er nicht, weil
Java:
new ImageLoader().getClass().getResource(path)
offensichtlich eine falsche URL liefert.

ImageLoader befindet sich aber in der jar, die ich plugin-mäßig laden will. Müsste es dann nicht eine URL aus dieser Jar liefern?

Java:
new ImageLoader().getClass().getResource("/")
mit Slash
liefert jedoch den Pfad des Hauptprogramms.

Kann mir das jemand erklären?

Und wie löse ich das Problem am besten? Wie bekomme ich eine URL aus der Jar, die ich laden will?
 
Ich erstelle die jars mit Fat Jar.

getResourceAsStream liefert auch nicht das richtige

und noch etwas ist komisch:

getResource("/") liefert immer mal was anderes.

- wenn ich das hauptprogramm in eclipse startet, liefert es das src-Verzeichnis vom hauptprogramm

- wenn ich das hauptpgogramm auch als jar exportiere, liefert es null.. wie kann das denn sein? irgend eine URL muss doch herauskommen

- als ich in Java Extentions einen Ordner drin hatte, lieferte er die URL zu diesem Ordner.

Irgendwas versteh ich da nicht. dachte immer getClass().getResource("/..") liefert eine URL relativ zum Ort der Klasse, die man sich holt.
-> stimmt das?


Vielleicht liegt es auch an meinem "jar-loader", also der classloader, der klassen aus einer jar lädt. den hab ich irgendwo her, weiß gar nicht richtig wie der funktioniert.
Kann es sein, dass die geladenen Klassen dem Hauptprogramm hinzugefügt werden, sodass man eine URL relativ zum Hauptprogramm erhält?

Ich hätte ja eine Lösung. Mit dem jar-loader kann ich Bilder aus einem jar holen. Nur da muss ich so viel umbauen.

Schöner wäre es, wenn ich einfach eine URL aus der externen jar bekomme. Dann kann ich weiterhin ImageIO.read(URL) nutzen
 
Ich denke ich habs, falls es jemanden interessiert:

man kann die URL einfach konstruieren:

Java:
URL sourcePath = new URL("jar:file:Directory/jarfile.jar!"+path);

wobei path der Pfad innerhalb der jar ist, z.b. "/folder1/folder2/img.png"

🙂
 

Neue Themen


Zurück
Oben