Swing Icon in der Titelleiste "festnageln"

kodela

Bekanntes Mitglied
Hallo,

kann mir jemand sagen, wie ich es anstellen muss, dass das Icon der Titelleiste im Programm integriert wird. Bei mir funktioniert die Anzeige des Icons in der Titelleiste nur dann, wenn die Datei für dieses Icon im Arbeitsverzeichnis des Programmes vorhanden ist. Mit allen anderen Grafiken, zum Beispiel die für die Symbolleiste(n) habe ich dieses Problem nicht.

Hier mein Code für die Darstellung der Titelleiste:
Java:
Toolkit tk = Toolkit.getDefaultToolkit();
Image icon = tk.getImage(userDir + File.separator + "sudoku.ico");
setIconImage(icon);
Es wäre schön, wenn mir jemand helfen könnte.

Konrad
 
Hey,

wenn das Icon direkt im src-Folder liegen soll, dann holst du dir die URL so:
Java:
URL iconURL = getClass().getClassLoader().getResource("sudoku.ico");
Wenn es jedoch bspw. im Package
Code:
de.kodela
liegen soll, dann so:
Java:
URL iconURL = getClass().getClassLoader().getResource("de/kodela/sudoku.ico");
Und im Anschluss dann:
Java:
setIconImage(Toolkit.getDefaultToolkit().getImage(iconURL));
 
Hallo xehpuk,

danke für den Hinweis. Leider funktioniert das bei mir nicht. Ich bekomme immer folgenden Fehler:

Uncaught error fetching image:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99)
at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:113)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)

Alle meine anderen Grafiken habe ich im ordner src/img. Damit bekam ich aber für das Icon in der Titelzeile schon Probleme, es wurde in meiner Entwicklungsumgebung angezeigt, aber an anderer Stelle, also zum Beispiel beim Anwender, nicht. Aus diesem Grunde habe ich das Icon in den Projektordner gelegt und wenn es beim Anwender dann im Arbeitsverzeichnis auch vorhanden ist, dann wird es auch angezeigt.

So wie ich es gemacht habe lädt sich das Programm bei jedem Start das Icon. Ich möchte aber, dass das Icon wie alle anderen Grafiken in den Programmcode integriert ist und beim Anwender nicht vorhanden sein muss.

Jetzt habe ich für das Icon alle möglichen Fundorte ausprobiert, also im Projekt-Verzeichnis, im src-Verzeichnes und im Unterordner img von src, aber ich bekomme immer diese Fehlermeldung. Auch die Angabe des absoluten Pfades ändert daran nichts.

MfG. Konrad
 
Zuletzt bearbeitet:
Hast du auch auf das
Code:
getClassLoader()
geachtet? Dadurch geht er dann vom Root aus. Wenn man nur die Klasse nimmt, geht er wohl von dem Package aus, in dem die Klasse liegt. Damit hatte ich anfangs auch dieselben Probleme (Bild gar nicht gefunden, nur in IDE gefunden).

Im Anhang dann mal ein kleines Beispiel, kompiliert und die Source. 🙂
 

Anhänge

Ob jetzt getClassLoader() steht oder nicht macht keinen Unterschied.
Zeig mal den ganzen Code, in dem du das Icon lädst und gib den Pfad an.
 
Zuletzt bearbeitet:
Hallo,

danke für die Hinweise.

Wie mein Code aussah und auch funktionierte, allerdings nur, wenn die Grafik auch beim Anwender im Arbeitsverzeichnis liegt, habe ich um Zusammenhang mit meiner Anfrage schon gezeigt.

Jetzt habe ich nach xehpuk meinen ursprünglichen Code wie folgt ersetzt:

Java:
private final static Image icon =
       Toolkit.getDefaultToolkit().getImage(
       SudokuApp.class.getClassLoader().getResource("src/sudoku/Img/sudoku.png"));

und im Konstruktor
Java:
setIconImage(icon);

Mit diesem Code bekomme ich die selbe Fehlermeldung wie oben von mir bereits geschildert. Ausgelöst wird dieser Fehler in der Methode setIconImage() der Klasse Window. Dort in der if-Abfrage
Java:
if (peer != null) {
    peer.updateIconImages();
}
nach dem Aufruf von peer.updateIconImages() verabschiedet sich das Programm.

Das Beispiel von xehpuk funktioniert bei mir einwandfrei.

Konrad
 
Zuletzt bearbeitet:
Hallo,

mit folgendem Code funktioniert es. Ursache war vermutlich eine falsche Pfadangabe.

Java:
URL url = SudokuApp.class.getClass().getResource("/sudoku/Img/sudoku.png");
Image icon = getToolkit().getImage(url);
setIconImage(icon);

Danke noch einmal.

Konrad
 

Zurück
Oben