Donnerstag, 26. Juni 2014

Bilder mit getResource() in Java laden für .jar s

Erst neulich stand ich wieder vor einem nervigem Problem. Ich wollte mit Eclipse eine .jar erstellen für einen kleines Spiel, das ich geschrieben hatte. Das Problem: Ich habe es einfach nicht hinbekommen mittels getRessources() den richtigen Pfad oder überhaupt den richtigen Aufruf anzugeben und die Bilder richtig zu laden. Im Internet gibt es zu diesem Thema bereits einige Informationen, auch auf StackOverflow, aber keine hatte bei mir irgendwie geholfen und dann half ich mir einfach selbst. 

Mein Problem: Ich hatte ein main-Package das einen resources-Ordner samt Bilder, sowie ein java-package mit dem Code und vielen weiteren unter Packages beinhaltete. In einem dieser unter Packages hatte ich nun eine Klasse ImageLoader, die für mich die Bilder laden sollte. Das funktionierte im Debugging soweit so gut. Also ich nun aber auf getResources() umstellen wollte, kam das Problem mit den Pfaden, den die alten Pfade, die mit mit new File("pfad") angegeben hatte gingen nicht mehr. Ich probierte unendlich viele Varianten, kam aber nicht drauf. Letztendlich war die Lösung folgende:

ImageLoader.class.getClassLoader().getResource("main/resources/" + imageName + ".png")

 Per ausprobieren fand ich heraus, dass der Befehl generell erstmal 

X.class.getClassLoader().getResource()

lautet wobei X = der Klassenname ist, in der das Bild geladen wird, in meinem Fall der ImageLoader. Das Problem war nun immer der Pfad, doch den kann man ganz einfach herausfinden. Man platziert einfach folgendes

System.out.println(ImageLoader.class.getClassLoader().getResource(""));

an der Stelle bevor man das Bild lädt. Debuggt man nun das Ganze, so erscheint auf der Konsole der entsprechende Klassen Pfad, was in meinem Fall einfach der bin-Ordner im Projekt-Ordner war. Mit diesem Wissen kann man nun einfach den Pfad ab den bin-Ordner fortsetzen. In meinem Fall war das der Packagename + der Ordnername: also "main/resources/" hängt man jetzt noch den Bildnamen an, wie bereits oben geschehen, so sollte es keine Probleme geben.

1 Kommentar:

  1. Wynn vs. Bovada - Gaming News, Insights, & Facts
    Wynn Casino and Resort, Wynn, are both on the 제주 출장마사지 Boardwalk in the 포항 출장샵 United States of America. The two 제주 출장안마 resorts feature 인천광역 출장안마 several gaming facilities. Wynn Las 김해 출장안마

    AntwortenLöschen