# JAR -> Icons werden nicht mehr angezeigt



## Sukoor (10. Apr 2006)

Hallo,

kurzlich habe ich mir eine Anwendung erstellt und diese in einem Jar verpackt. Starte ich die Anwendung aus Eclipse (normal oder im Debug) so werden die Icons einwandfrei angezeigt. Starte ich die Anwendung jedoch über das Jar so ist die Funktionalität der Anwendung nicht eingeschrenkt, jedoch werden sämtliche Icons auf den Buttons nicht zur Anzeige gebracht.

Verwendete Komponenten:
- Buttons: javax.swing.JButton;
- Icons: *.png

Ablagestruktur:





Hat einer von euch eine Idee woran es liegen könnte?

Viele Grüße

Sukoor


----------



## L-ectron-X (10. Apr 2006)

Forumsuche: http://www.java-forum.org/de/viewtopic.php?t=29193


----------



## Beni (10. Apr 2006)

Wie lädst du die Icons? Du musst sie über eine "Class" oder den "ClassLoader" und der Methode "getRessource" laden. Ich glaube, dazu steht was in der FAQ, und auch die Suche könnte weiterhelfen...


----------



## paedubucher (10. Apr 2006)

Das könnte helfen:


```
private void setIcon()
{
  InputStream is = getClass().getResourceAsStream("/files/icon.png");
  shell.setImage(new Image(display, is));
}
```

shell steht für meine Shell, display für mein Display ;-)

Der Pfad zu meinem Icon würde so lauten, wenn ich im Projekt-Root ein package "files" hätte, welches eine Datei namens "icon.png" enthält.

Hoffe, konnte dir helfen...


----------



## Sukoor (11. Apr 2006)

Danke für die Antworten. Habe die Suche bereits bemüht gehabt, aber leider scheinen auch die 
im FAQ und sonstige Lösungen mein Problem nicht zu beheben. Deshalb nun ein kleiner Codeausschnitt:


```
//Pfad zu den Bildern (erster Parameter 'imageIcon'): root.data.images.icon
//Klassenpfad: root.util.gui.SButton 
//Erzeugung des Buttons inkl. Icon
public static SButton generate16x16Button(String imageIcon, String tooltip)
    {
        URL imageUrl = ClassLoader.getSystemClassLoader().getResource(imageIcon);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image image = toolkit.getImage(imageUrl);
        SImageIcon imgI = new SImageIcon(image);
        SButton imgB = new SButton(imgI);
        imgB.setPreferredSize(new Dimension(24, 24));
        imgB.setBorder(BorderFactory.createBevelBorder(0));
        imgB.setForeground(Color.darkGray);
        imgB.setToolTipText(tooltip);

        return imgB;
    }
```

Die Anwendung lässt sich unter Verwendung eines ClassLoaders über die Jar garnicht mehr starten!


----------



## Beni (11. Apr 2006)

Benutz mal einen anderen ClassLoader als der SystemClassLoader. Ich könnte mir vorstellen, dass dieser ClassLoader nur in der Verzeichnis des JREs sucht. Der ClassLoader "SButton.class.getClassLoader()" hingegen sucht sicherlich in der JAR deines Programmes.


----------



## Sukoor (11. Apr 2006)

Beni hat gesagt.:
			
		

> Benutz mal einen anderen ClassLoader als der SystemClassLoader. Ich könnte mir vorstellen, dass dieser ClassLoader nur in der Verzeichnis des JREs sucht. Der ClassLoader "SButton.class.getClassLoader()" hingegen sucht sicherlich in der JAR deines Programmes.



Hi Beni,

das habe ich auch schon probiert. Habe hierzu "ClassLoader" aus diversen Klassen verwendet, aber leider kein Erfolg. Innerhalb von Eclipse (normal & Debug) lässt sich die Anwendung einwandfrei ausführen, aber als Jar startet die Anwendung nicht mal 

Viele Grüße

Sukoor


----------



## Guest (12. Apr 2006)

```
Image image = new ImageIcon(getClass().getResource("/root/data/images/icon.png"));
```


----------



## Sukoor (12. Apr 2006)

So ich hab das Jar mal auf Rapidshare gestellt:

http://rapidshare.de/files/17799737/test.jar.html

Ich würde mich sehr freuen, wenn sich ein Kenner unter euch das Jar mal kurz ansieht.

Danke & viele Grüße

Sukoor


----------



## Sukoor (12. Apr 2006)

Anonymous hat gesagt.:
			
		

> ```
> Image image = new ImageIcon(getClass().getResource("/root/data/images/icon.png"));
> ```



Sorry, aber ich habe die Imageerzeugung auf alle erdenkliche Art und Weise ausprobiert. Diese Variante war auch dabei, aber hat leider kein positives Ergebnis zur Folge gehabt 

Viele Grüße

Sukoor


----------



## Guest (12. Apr 2006)

Sorry, da hat sich bei mir ein Fehler eingeschlichen. Muss natürlich so heissen:

```
ImageIcon image = new ImageIcon(getClass().getResource("/root/data/images/icon.png"));
```

Kleiner Tip: Da sich wohl kaum einer finden wird, der sich Dein komplettes Package und den Code zu Gemüte führt, probiere das ganze mal in einem neuen kleinen Package! Das Package muss ja nur eine Klasse und eine Bilddatei enthalten.


----------



## Sukoor (12. Apr 2006)

Habe es hinbekommen. Vielen Dank nochmal für den guten Support !!!

Viele Grüße

Sukoor


----------

