Ich habe eine Ordnerstruktur wie diese.
Project/src/folder/folder/folder/xyz.java
/img/background.jpg
Und ich möchte das background.jpg in ein JPanel in xyz.java
. Nur für den Hintergrund. Und ich habe es gemacht mit
private ImageIcon createImageIcon(String path, String description) {
java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
Das Problem dabei ist jedoch, dass sich das Bild im selben Ordner befinden muss wie die xyz.java
Ich habe ein wenig recherchiert und herausgefunden, dass dieses Problem mit folgenden Mitteln gelöst werden kann getResourceAsStream("path")
aber ich kann nicht genug Wissen aufbringen, um dieses Problem zu lösen. Dies ist wichtig für mich, weil ich mein Programm als *.jar-Datei auf verschiedenen Betriebssystemen ausführen möchte.
Mein Problem ist, dass ich nicht verstehe, wie getRessourceAsStream("Pfad") anders funktionieren sollte. Ich habe kein Tutorial gefunden, das für mich passt. Es scheint, dass die meisten Leute es für verschiedene .jar Dateien oder Applets verwenden. Und ich weiß nicht, was ein Stream machen kann, wo getRessourceAsStream("path") anfängt (d.h. wie muss ich den Pfad schreiben). Es gibt so viele Wissenslücken...
Edit: Ich habe eine Lösung gefunden, bei der ich keinen Gesamtpfad angeben muss. img = ImageIO.read(getClass().getResource("../../../../img/bg_1.jpg"));
Ich habe es nicht getestet, aber es sollte auch auf den anderen Systemen laufen. Das Problem ist aber, dass ich mein Programm nur in Eclipse starten kann. Wenn ich es in eine *.jar Datei exportiere, läuft es gut, aber es lädt das Bild nicht. Und es schrumpft das Fenster auf ein Minimum, obwohl ich setPreferredSize eingestellt habe. Also sollte ich vielleicht die Stream Lösung ausarbeiten. Aber jetzt ist es Zeit für's Bett.
Edit: Der relative Pfad funktioniert gut, wenn ich die Bilder in ein Paket packe. Nicht das, was ich wirklich wollte, aber nach 6h raten über dieses kleine Problem musste ich einige Fische durch meinen Ozean schwimmen zu bringen...