# Probleme mit setIconImage



## Palim_86 (30. Jul 2012)

Hallo,

Ich hatte vor das IconImage, also das "Bildchen" oben links im Frame. Statt der Java-Tasse sollte es ein Auto anzeigen. Das Format des Bildes ist .png und es ist 24x24 Pixel groß. (habe auch ein 16x16 probiert)


```
public Autotest() {
//        Image icon = new ImageIcon("autoicon.png").getImage();
        setIconImage(getToolkit().getImage("autoicon.png"));
        initComponents();
```

Alternativ hätte ich es mit dem eigenen icon als Image probiert, hat genauso wenig funktioniert. Das Problem ist das einfach die Tasse weiterhin angezeigt wird, keine Fehlermeldung, nichts. Das Bild jedoch müsste eigentlich passen, selbe Größe wie die Tasse, Format ist png was bei Labels tadellos funktioniert. Das Bild befindet sich selbstverständlich im Klassenordner (src).

Weiß nicht mehr wirklich weiter, in anderen Postings hier wurde es genau so erklärt.

lg


----------



## c_sidi90 (30. Jul 2012)

Also anhand deines Code kann ich jetzt keinen Fehler erkennen. Bei mir funktionierts jedoch so:


```
public class Example extends JFrame{
	public Example(){
		setSize(300,300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Image iconImage;
		try {
			iconImage = ImageIO.read(new File("bla.png"));
			setIconImage(iconImage);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		setVisible(true);
	}
	
	public static void main(String[]rgs){
		new Example();
	}
}
```


----------



## pro2 (30. Jul 2012)

Ich mach's so, vielleicht hilfts:


```
private void initIcon()
    {
        URL url = ClassLoader.getSystemResource("resources/icon2.png");
        Image img = getToolkit().getImage(url);
        this.setIconImage(img);       
    }
```


----------



## Palim_86 (30. Jul 2012)

Das ist mal ein Ding. c_sidi90's Version funktioniert nicht, füge ich aber das von pro2 ein geht es plötzlich. Hauptsache es geht jetzt  Danke sehr!

lg



c_sidi90 hat gesagt.:


> Also anhand deines Code kann ich jetzt keinen Fehler erkennen. Bei mir funktionierts jedoch so:
> 
> 
> ```
> ...


----------



## c_sidi90 (30. Jul 2012)

Bei mir funktioniert es einwandfrei, so mach ich das immer. Da muss ich leider passen, keine Ahnung was bei dir schief lieft.
Wenns jetzt klappt ist ja super


----------



## Palim_86 (30. Jul 2012)

Hab es gerade in meine eigene Klasse eingefügt und dort funktioniert es auch wieder nicht. Scheinbar funktioniert der Code nur in "handgeschriebenen" Klassen, in denen von Netbeans funktioniert es nicht. Denke das hat mit dem "Bug" zu tun das man setIconImage vor dem sichtbar machen verwenden muss. Bei den von Netbeans erstellten Klassen wird die .setVisible Methode woanders aufgerufen. Leider bin ich noch nicht so "fortgeschritten" das ich dieses "automatisch erstellte" sicher entziffern kann. Besonders die Run Methode ganz unten verwirrt mich.

Hier der gesamte Code:

```
package Javaicon;

import java.awt.Image;
import java.net.URL;

public class Javaicon extends javax.swing.JFrame {

    /** Creates new form Javaicon */
    public Javaicon() {
        URL url = ClassLoader.getSystemResource("autoimage.png");
        Image img = getToolkit().getImage(url);
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 380, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 220, Short.MAX_VALUE)
        );

        pack();
    }


    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Javaicon.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Javaicon.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Javaicon.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Javaicon.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Javaicon().setVisible(true);
            }
        });
    }

}
```

lg


----------



## SlaterB (30. Jul 2012)

ein Problem könnte sein, dass die Zeichenfolge "setIconImage" in diesem 5. Codeblock im Gegensatz zu den 4 vorherigen nirgendwo auftaucht..


----------



## mla.rue (31. Jul 2012)

NetBeans... 'Design' Sicht deiner Haupt GUI Anwendung starten, im 'Inspector' Rechtsklick auf deine JForm, ... Properties, ... IconImage.... CustomCode. Fängt mit: Form.setIconImage -> 
"new ImageIcon(getClass().getResource("/com/rcs/app/risae/rss/gpingu34x34.png")).getImage()"

Den Pfad solltest du natürlich entsprechend ändern. Beachte, dass von "natur" aus NetBeans nur Dateien/Verzeichnisse aus dem SRC Verzeichnis ins JAR packt. Beim Speichern wird build/ gelöscht und neu angelegt/aktualisiert, dann sind alle Dateien die du dort evtl. abgelegt hast futsch. Ohne entsprechende Anpassung werden von Hand angelegte Verzeichnisse und Dateien ignoriert und sind nur in der IDE verfügbar.


----------



## Palim_86 (31. Jul 2012)

mla.rue hat gesagt.:


> NetBeans... 'Design' Sicht deiner Haupt GUI Anwendung starten, im 'Inspector' Rechtsklick auf deine JForm, ... Properties, ... IconImage.... CustomCode. Fängt mit: Form.setIconImage ->
> "new ImageIcon(getClass().getResource("/com/rcs/app/risae/rss/gpingu34x34.png")).getImage()"
> 
> Den Pfad solltest du natürlich entsprechend ändern. Beachte, dass von "natur" aus NetBeans nur Dateien/Verzeichnisse aus dem SRC Verzeichnis ins JAR packt. Beim Speichern wird build/ gelöscht und neu angelegt/aktualisiert, dann sind alle Dateien die du dort evtl. abgelegt hast futsch. Ohne entsprechende Anpassung werden von Hand angelegte Verzeichnisse und Dateien ignoriert und sind nur in der IDE verfügbar.



Vielen Dank! Jetzt funktioniert es auch mit den Netbeans Programmen 

lg


----------

