Icon ändern

Hallo,

ich habe folgenden Code um mein Icon (oben links) zu ändern.

Nur leider funktioniert das nicht so ganz. Mein Frame hängt sich dabei ständig auf :confused:

            	Image image = tk.getImage("test.gif");
            	while (!tk.prepareImage(image, -1, -1, frame)) {
            	       try {
            	         Thread.sleep( 100 );
            	       } catch ( Exception e ) {}
            	     }
            	frame.setIconImage(image);
                frame.show();```

Das Bild solltest du besser mit [JAPI]ImageIO[/JAPI] laden. Den Thread wirfst du raus.
Und show() ist deprecated und sollte mit setVisible(true); ersetzt werden.

                try {
                    // Read from a file
                    File sourceimage = new File("test.gif");
                    image = ImageIO.read(sourceimage);
                } catch (IOException e) {
                }
                frame.pack();
                frame.setVisible(true); ```

was mache ich denn noch falsch? 

So sollte das klappen. Wo muss die Datei liegen?

Ich habe die im Projektordner. Muss ich die Datei noch irgendwie hinzufügen? 

Ich benutze eclipse, falls es jmd interessiert ;)

Du schluckst eventuell auftretende Exceptions.

[QUOTE=izloh;28814]} catch (IOException e) { }[/QUOTE]
Du setzt nirgends das IconImage

so wie du das hast müsste die Bilddatei im selben package wie deine Klasse liegen.
Wenn sie im Projektordner liegen soll nimm einen relativen Pfad mit "./Bild.gif" o.ä.

Mit File wird eine Datei aus der lokalen Datei- und Verzeichnisebene geladen.
In einem späteren Programm ist das meistens unbrauchbar.
Deine Grafikdateien sollten mit in deiner Jar-Datei gespeichert werden.

Wenn du deine Grafikdatei mit ImageIO lädst, hilft dir das sicher weiter: http://wiki.byte-welt.net/wiki/Grafikdateien_laden_und_anzeigen#ImageIO

Danke =)

                try {
                    // Read from a file
                    File sourceimage = new File("./test.gif");
                    image = ImageIO.read(sourceimage);
                } catch (IOException e) {
                }
                frame.setIconImage(image);
                frame.pack();
                frame.setVisible(true); ```

Im catch-Block sollte mindestens ein e.printStackTrace(); oder System.err.println(e); stehen.
In einem Fehlerfall wird sonst nichts ausgegeben!

Komfortabel kann das so aussehen:

   JOptionPane.showMessageDialog(frame, "Fehler beim Einlesen einer Grafikdatei!
"+e.getMessage());
   e.printStackTrace();
}```