Bilder werden in Jar nicht geladen

Trunk

Mitglied
Hallo!

Da ich mithilfe der Suchfunktion keine Lösung finden konnte, frage ich nun hier mal nach:

Ich lade in Eclipse meine Bilder wie folgt:

Java:
cursor = loadPics("curser.gif");

Java:
private BufferedImage loadPics(String path){

		BufferedImage source = null;

		URL pic_url = getClass().getResource(path);

		try {
			source = ImageIO.read(pic_url);
		} catch (IOException e) {}


		return source;
	}

Exportiere ich nun mein Projekt als .jar, funktioniert das nicht mehr und ich bekomme eine nullpointer exception. Und das, obwohl ich den Ordner "Images" als "Source" hinzugefügt habe.
Wie lade ich das ganze denn nun am besten, sodass es in der IDE und als .jar funktioniert?



 
Hi,

erst mal würde ich mir direkt eine sinnvolle package-Struktur angewöhnen! Dann machst du ein Package mit z.B. dem Namen resources wo du dann deine Bilder hinein tust.
Dann getResource mit dem abolsuten oder relativen Pfad (Package-Struktur) aufrufen - Dann klappt das auch 🙂
 
Hi,

erst mal würde ich mir direkt eine sinnvolle package-Struktur angewöhnen! Dann machst du ein Package mit z.B. dem Namen resources wo du dann deine Bilder hinein tust.
Dann getResource mit dem abolsuten oder relativen Pfad (Package-Struktur) aufrufen - Dann klappt das auch 🙂

Nunja, ich denke ich hatte es genauso wie du meintest, nur das funktionierte ja auch nicht.
In etwa so:



Wenn ich es jetzt also so lade:

Java:
public SpriteLib() {
		
		String pfad = "/Images/";
		cursor = loadPics(pfad+"curser.gif");

Java:
    private BufferedImage loadPics(String path){

		BufferedImage source = null;

		URL pic_url = getClass().getResource(path);

		try {
			source = ImageIO.read(pic_url);
		} catch (IOException e) {}


		return source;
	}

Funktioniert es zwar in der IDE, nicht aber als JAR. Wieso nicht? Was mache ich falsch? ???:L


EDIT: So sieht das ganze übrigens innerhalb der erstellten jar aus:

 
String pfad = "Images/";
statt
String pfad = "/Images/";
!?
Und schau mal in die JAR, ob die Bilder dort wirklich drin liegen.
 
Groß/Kleinschreibung beachtet? Bei Windows und Dateien ist das egal, ansonsten nicht...

Ich glaube nicht dass das das Problem sein kann, immerhin funktioniert ja alles noch wenn ich es in Eclipse teste, nur als JAR dann eben nicht :/

Okay verdammt, es gab tatsächlich einen Fehler bei einer Datei, da hab ich Groß und kleinschreibung vertauscht, nur wieso gings dann in der IDE? 😱
Naja danke an euch! 🙂
 
Zuletzt bearbeitet:
Wie gesagt: Bei Windows wird zwischen Groß/Kleinschreibung nicht unterschieden. "Image.gif" ist dieselbe Datei wie "image.GIF". Aber IN der JAR ist das dann eben relevant, weil der Eintrag in der JAR nur gefunden wird, wenn Groß/Kleinschreibung stimmen. (Aber auch auf allen Linux-Systemen wird diesbezüglich unterschieden, man sollte also immer drauf achten!)
 
Falls du die Lösung nicht schon gefunden hast probier doch mal eine einfache Resource Loader Klasse. Da man eine solche auch nur einmal braucht ist ein Singleton sinnvoll.

Hier mal Beispielcode wie sowas aussehen kann:

Java:
public class ResourceLoader {

    private static ResourceLoader loader = new ResourceLoader();
    private static final String iconsURL = "dein/package/name/mit/slashs/als/trenner/";
    
    private ResourceLoader() {
    }

    public static ResourceLoader getInstance() {
        return loader;
    }
    
    public ImageIcon getImageIcon(String iconName) {        
        ImageIcon icon = null;
        URL url = getClass().getClassLoader().getResource(iconsURL + iconName);
        try {
            icon = new ImageIcon(url);
        } catch (Exception e) {
            // do nothing
        }        
        return icon;
    }
}

Mein Loader Beispiel liefert zwar jetzt Icons aber der Weg zum Image ist ja analog zu betrachten.
 

Zurück
Oben