Bilder aus .Jar-Datei laden nicht

ntpnexus

Grünschnabel
Hallo, nachdem ich jetzt 3 Stunden an diesem Probleme sitze und zahlreiche andere Forenbeiträge, unter anderen auch hier, keine Lösung brachten, nun dieses Thema:

In einem JFrame möchste ich ein Bild via ImageIcon anzeigen lassen.

In meinem Programm sieht die Ordner-Struktur derzeit wie folgt aus:

Code:
|----- KICS
       |----- master
       |----- gui
       |----- timers
       pc_inuse.png

Ich habe also meine 3 Pakete und in dem Hauptordner (testweise) die Bilder.

In master.Window erstelle ich ein JFrame sowie andere Komponenten, darunter auch mein Bild, das ich wie folgt initialisiere:

Code:
ImageIcon pic_inuse = new ImageIcon(getClass().getResource("/pc_inuse.png"));

Wenn das Programm in eclipse starte, ist auch alles in Ordnung, die Bilder werden in den JLabels angezeigt. Das System.out.println( pic_inuse.toString() ); sagt mir folgendes:

Code:
file:/G:/eclipse/workspace/KICS/pc_off.png

Dies stimmt auch, dort befindet sich das Bild. Erstelle ich nun mit eclipse ein Jar-Archiv und starte dieses, zeigt er die Bilder nicht mehr, wirft auch keine NullPointer-Exception und gibt in der Konsole folgendes aus:

Code:
C:\Dokumente und Einstellungen\d!neX\Desktop>java -jar kics_master.jar
jar:file:/C:/Dokumente%20und%20Einstellungen/d!neX/Desktop/kics_master.jar!/pc_o
ff.png

Der Pfad stimmt eigentlich, ich weiß jetzt nur gerade nicht ob das mit dem jar: davor und dem ! hinter dem Archiv so in Ordnung ist.

Habt ihr eine Idee woran es liegen könnte? Ich hab schon mit diversen Pfad-Angaben hantiert, wie ./ und / davor, alles in Unterordner, es ist jedesmal das selbe Problem und ich weiß nicht mehr weiter.
 
vieleicht kommt er nicht damit klar das du das bild in den defaultFolder gelegt hast. Einfach mal nen packet zB img.* anlegen und da die Bilder reinlegen. Dann sollte es mit:
Code:
ImageIcon pic_inuse = new ImageIcon(getClass().getResource("/img/pc_inuse.png"));
 
Ich habe nun im KICS-Ordner, wo sich die Pakete befinden, das Paket "img" erstellt und das Bild dort reingetan.

Code:
|----- KICS
       |----- master
       |----- gui
       |----- timers
       |----- img
              pc_inuse.png

Meine Initialisierung sieht jetzt so aus:

Code:
image = new ImageIcon(getClass().getResource("/img/splashscreen.jpg"));

Die Ausgabe beim Öffnen der Jar via cmd:

Code:
C:\Dokumente und Einstellungen\d!neX\Desktop>java -jar kics_master.jar
jar:file:/C:/Dokumente%20und%20Einstellungen/d!neX/Desktop/kics_master.jar!/img/pc_o
ff.png

Genau das selbe wie vorher: eclipse zeigt das Bild an, die Jar-Datei leider nicht :(
 
Versuchs mal nur mit
Java:
image = new ImageIcon(getClass().getResource("img/splashscreen.jpg"));

also ohne den Slash, da dies auch immer das Problem im jar darstellte (im Pfad der Slash passte da nicht wirklich hin).
 
Dann bekomme ich eine Null-Pointer-Exception:

Code:
Exception in thread "pool-1-thread-1" java.lang.NullPointerException 
at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
 
Genau das selbe Problem hab ich auch!

Also, ich hab mittlerweile 3 wege probiert, welche mal funktionieren und mal nicht.
  1. mit getRessource(...)
  2. mit einer DummyClass im BilderPackage, von der ich mir mit getRessource die URL hole und dann mit ImageIcon(URL/bildname) das Bild erzeuge
  3. mit einem eigenen URLClassLoader, welcher die Jar kennt. Aus dem URLClassLoader hole ich mir dann mit getRessource die URL zum Bild hole.
Ich hab eine Hauptanwendung, welche 3 Plugins lädt. Jedes Plugin mit seinem eigenen Weg eine URL eines Bildes zu erzeugen.
Keiner der 3 Wege funktioniert in jedem der Plugins.
Das lässt einen und den Autor dieses Threads verzweifeln und zweifeln an JAVA.

Hat einer noch einen Weg wie man ein Bild aus einer Jar laden kann?

Ich probiere ALLES :suspekt:

Danke im Voraus...
 
Hi,
ich habe mal in meinen Projekten gewühlt und folgenden Code gefunden, der bisher problemlos funktioniert:
Code:
String sPath2Gif = "view/parmTree/images/delete.gif";
java.net.URL url = ClassLoader.getSystemResource( sPath2Gif );
Icon icon = new ImageIcon( url );
Dabei ist "view" ein package auf oberster Ebene, also direkt unter dem Projekteintrag (Eclipse).
Grüße
testalucida
 
Ich reanimiere diesen Beitrag.

Ich habe ein Package "Bilder", in diesem befinden sich die Images. Nun greife ich über "<Projektname>"//Bilder//bild.png"; darauf zu. Übrigens ich nutze Eclipse. Beim testen wird es angezeigt. Sobald ich eine .jar-Datei erstelle hab ich keinen Zugrif darauf, sprich es wir nicht angezeigt. In der .jar-Datei befindet es sich definitiv.
 
Zurück