# Class loader und setIcon



## Gast2 (21. Jun 2007)

Hallo zussamen,
ich habe ein problem mit dem classloader 


```
postfach	=new ImageIcon(ClassLoader.getSystemResource("studio/lib/post.jpg"));
JLabel image= new JLabel(postfach)
```

das funktioniert noch doch sobald ich 

```
image.setIcon(postfach)
```

gibt es einen fehler in meinem jar file


das gleiche bei itext

```
Image kopf=Image.getInstance(ClassLoader.getSystemResource("studio/lib/briefkopf.gif"));
```

was ist daran falsch?


----------



## The_S (21. Jun 2007)

Wenn es einen Fehler gibt, immer diesen dazuposten!


----------



## Gast2 (21. Jun 2007)

also unter eclispe funktionierts nur sobald ich die jar-datei ausführe kommt der fehler

C:\Projekte\Studio>java -jar bodystyle.jar
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(Unknown Source)
        at studio.main.MEDButtonPanel.<init>(MEDButtonPanel.java:72)
        at studio.base.MEDJFrame.<init>(MEDJFrame.java:148)
        at studio.base.MEDLogin.pr³fen(MEDLogin.java:146)
        at studio.base.MEDLogin.actionPerformed(MEDLogin.java:180)
        at javax.swing.JTextField.fireActionPerformed(Unknown Source)
        at javax.swing.JTextField.postActionEvent(Unknown Source)
        at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source)
        at javax.swing.SwingUtilities.notifyAction(Unknown Source)
        at javax.swing.JComponent.processKeyBinding(Unknown Source)
        at javax.swing.JComponent.processKeyBindings(Unknown Source)
        at javax.swing.JComponent.processKeyEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)

        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Sour
ce)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Sour
ce)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

C:\Projekte\Studio>


----------



## The_S (21. Jun 2007)

Das Bild ist unter angegeben Pfad mit ins Jar gepackt worden?


----------



## Gast2 (21. Jun 2007)

klar die anderen bilder funktionieren ja auch...
also wenn ich die setIcon() auskommentiere funktioniert es ,aber da ich einen thread habe wo immer 2 bilder abwechselnd aufblinken lässt bräuchte ich die funktion


----------



## The_S (21. Jun 2007)

Hm, dann wird dein ico wohl null sein ..., gilt nur noch zu ermitteln warum. Überprüf mal, ob es gleich nach dem laden null ist. Ich kann dein Problem bei mir nämlich nicht rekonstruieren.


----------



## Gast2 (21. Jun 2007)

nee ist nicht weil null sonst wäre es in eclipse doch auch null oder???
ich mach des gleich alls aller 1. im konstruktor!!!!!mhm ....


----------



## Gast2 (21. Jun 2007)

kann des sein dass das setIcon problem mit einer url hat weil wenn ich classloader.....
mache dann steht da filefad
wenn ich das ganze ohne classloader mache steht da was anderes drin


----------



## The_S (21. Jun 2007)

überprüf ob es null ist. Entweder das Label oder das Icon MUSS null sein, ansonsten wird keine NullPointerException geworfen!


----------



## Gast2 (21. Jun 2007)

ja des ist mir schon bewusst ich hab durch gedebugt ....da ist nichts null...


----------



## The_S (21. Jun 2007)

Wenn weder das Icon, noch das Label null ist, aber bei der Zeile


```
label.setIcon(icon);
```

eine NullPointerException geworfen wird, dann gibts nur zwei Möglichkeiten

a) ich bin bescheuert und es gibt noch weitere Gründe warume eine NullPointerException geworfen wird.
b) du sagst mir nicht alles/nicht die wahrheit/nimmst einfach was an, ohne es zu testen  .


----------



## The_S (21. Jun 2007)

Hab mir dann doch mal die Mühe gemacht und stellvertretend für dich ein KSKB angefertigt


```
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class PictureTest {

	public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		ImageIcon ico = new ImageIcon(ClassLoader.getSystemResource("Kreuz.png"));
		JLabel label = new JLabel();
		frame.add(label);
		label.setIcon(ico);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
	}
}
```

Kreuz.png liegt direkt im default-package (war jetzt zufaul packages zu erstellen). Dieser Code funktioniert bei mir sowohl in Eclipse, als auch exportiert in ein Jar!


----------



## Gast2 (21. Jun 2007)

damit du mir glaubst meine debug ergebnisse
icon=new MEDJLabel(postfach);
ICONMAGE postfach
-file:/C:/Projekte/Studio/studio/lib/post.jpg
    -file:/C:/Projekte/Studio/studio/lib/post.jpg
        file=/C:/Projekte/Studio/studio/lib/post.jpg
        path=/C:/Projekte/Studio/studio/lib/post.jpg
    accesibleContext=null----------------------------das einzigste was null ist was auch immer das sein soll 

LABELICON 

studio.base.MEDJLabel[,974,5,18x20,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=file:/C:/Projekte/Studio/studio/lib/post.jpg,disabledIcon=,horizontalAlignment=CENTER,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=,verticalAlignment=CENTER,verticalTextPosition=CENTER]


----------



## The_S (21. Jun 2007)

Ich kenn mich in der Klasse ImageIcon zwar nicht so aus, aber ich kann mir nicht vorstellen, dass es so sonderlich gut ist, wenn der accesibleContext gleich null ist ... Mal ganz davon abgesehen, dass mir ein


```
System.out.println(postfach);
```

bzw.


```
System.out.prinln(postfach == null);
```

vollkommen genügt hätte.

Hattest du nicht erwähnt, dass es geht, wenn du postfach deinem Label gleich im Konstruktor zuweist? Das machst du ja hier ...


----------



## Gast2 (21. Jun 2007)

wart ich lass es kurz ausgegeben!!!!!
nee hat auch nicht geklappt bei meinen veruschen danach mach ich genau das gleiche mit einem gif damit er keine probleme???könnte es eventuell auch daran liegen??


----------



## Gast2 (21. Jun 2007)

in eclipse folgende ausgabe

false
postfach file:/C:/Projekte/Studio/studio/lib/post.jpg


----------



## The_S (21. Jun 2007)

und mit den selben daten klappts in eclipse? Ist evtl. das Image beschädigt? Hatte ich auch schon. War recht ärgerlich, da keine bzw. unerklärliche Fehlermeldungen auftraten und ich ca. den halben Tag nach dem Fehler gesucht hab, bis ich mal n anderes Image genommen hab  .


----------



## Gast2 (21. Jun 2007)

das komische ist aus eclipse raus bekomm ich die bilder angezeigt!!!!
oder wenn ich die bilder ausserhalb des jar-files lege und den pfad anpasse funktioniert es auch mit der jar-datei nur meine bilder sind halt nicht drin ist unschön!!!!und die anderen 15 bilder funktionieren sind nur diese beiden !!!!!
also kann ich datei ja nicht beschädigt sein oder????sonst würde ich das bild ja nie angezeigt bekommen oder?


----------



## The_S (21. Jun 2007)

Hm, das ist irgendwie sehr merkwürdig. Speicher die Bilder doch mal in einem anderen Format ab, png z. B. (finde ich sowieso viel besser als jpg  ). Evtl wird beim Packen da irgendwo ein byte oder sonstwas verloren. Könnte mir zwar nicht erklären wie, aber ein Versuch ist es wert!


----------



## Gast2 (21. Jun 2007)

ok des versuch ich mal!!!!
also wenn ich 2 andere bilder zu mindet nehme funktioniert es megaaaaaaaaaaa dreck 
ok irgendwie sind alle bilder die ich mit paint bearbeitet hab am arsch oder sagen wir so mit denen klappt es nicht!!!
egal welches format


----------



## The_S (21. Jun 2007)

zieh dir mal Paint.NET . Ist Freeware und ca. 5367509 mal besser als MS-Paint  .


----------



## The_S (21. Jun 2007)

Warte, du sagtest MS-Paint? Hehe, mir kommt da ein verdacht. Paint speichert die Bilder Standardmäßig mit groß-geschriebener Extension ab. Also statt .jpg, .gif oder .png steht da dann halt .JPG, .GIF oder .PNG. Da das Dateisystem unter Windows nicht Case-Sensetive ist, ist es Windows egal, ob deine Datei groß oder klein geschrieben ist, sie wird so und so gefunden. Aber in einem JAR ist das nicht so. Wenn du deine Bilder also so Bild.PNG abspeicherst, musst du sie im JAR auch unter Bild.PNG ansprechen und nicht unter Bild.png. Ansonsten wird das Bild schlichtweg nicht gefunden!


----------



## Gast2 (21. Jun 2007)

alles ist besser wie ms-paint  ok versuchs mal mit dem vielleicht zerstört der nicht gleich meine ganzen bilder


----------



## The_S (21. Jun 2007)

Brauchste vermutlich net, überprüf erstmal den Tipp in meinem letzten Beitrag  .


----------



## Gast2 (21. Jun 2007)

hehe ok des versuch ich mal ist mir gar nicht aufgefallen


----------



## Gast2 (21. Jun 2007)

Oh man ey jetzt funktionierts!!!!!danke für die geduld!!!!!
ich werde es mir merken


----------



## The_S (21. Jun 2007)

Ohne jetzt lästern zu wollen, aber wenn du einfach mal das kontrolliert hättest, was ich dir vorgeschlagen habe (mein 1. produktiver und 2. post in diesem Thread insgesamt),



			
				Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Das Bild ist unter angegeben Pfad mit ins Jar gepackt worden?



und nicht nach dem Motto "Eh, ich bin mir 100pro sicher, dass das alles stimmt, da muss ich gar net nachgucken. Es kann gar net sein, dass es daran liegt, läuft in Eclipse ja auch"  gehandelt hättest, hättest du uns beiden einiges an Zeit und Nerven gespart!

Jetzt kann man zwar nix mehr ändern, aber merks dir für die Zukunft. Auch wenn der Tipp noch so lächerlich und unwirklich erscheinen mag, überprüf es, bevor du einfach mal sagst "Kann net sein, alles korrekt"! Würde ich in letzter Zeit selbst nicht so viel mit paint machen (ist einfach schnell mal da) und wäre ich net so hartnäckig, würdest du vermutlich noch nächstes Jahr mit deinem Problem dastehen, da die eigentliche Lösung ja schon genannt, von dir aber als "mumpitz" abgestempelt wurde.

:roll:


----------



## Gast2 (21. Jun 2007)

he ich hab nachgeschaut hab sogar mein ganzen jar extra entpackt!!!!aber wenn ich ehrlich bin jab ich auf das gar nicht geachtet!!!!!weil ich mal den ganzen mit copy paste reinkopiert hab und es auch nicht getan hat leider hab ich das nur für eine datei gemacht   hätte ich es für beide gemacht hätte es geklappt wüsste zwar nicht warum  ....
jetzt weiß ich warum es dann einmal getan hat wo ich ein bild auskommentiert hab na ja...


----------

