Moin,
ich hab mal wieder ne Frage:
Und zwar habe ich momentan mehrere JButtons, denen ich gerne ein Icon zuweisen würde.
Diese Icons liegen allerdings in einem anderen Ordner als das package mit meiner Klasse.
Hier ein Beispiel wie ich momentan versuche zu laden:
Java:
JButton btnBlubb =newJButton("Blubb");
btnBlubb.setBounds(5,423,31,32);
btnBlubb.setIcon(newImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("btnBlubb.png"))));
contentPane.add(btnBlubb);//content pane des JFrames
Allerdings erhalte ich immer folgenden Error beim Laden:
Java:
Uncaught error fetching image:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(UnknownSource)
at sun.awt.image.URLImageSource.getDecoder(UnknownSource)
at sun.awt.image.InputStreamImageSource.doFetch(UnknownSource)
at sun.awt.image.ImageFetcher.fetchloop(UnknownSource)
at sun.awt.image.ImageFetcher.run(UnknownSource)
Woran liegt das und wie kann ich das Icon richtig laden?
Der Pfad ist falsch. Ist ja auch irgendwie logisch, dass er eine Datei die in einem vollkommen anderen Ordner liegt, als die Klasse, nicht finden kann. Richtig müsste imho folgende Pfadangabe sein:
du kannst einfach den absoluten Pfad übergeben. Am besten einfach aus dem Explorer kopieren und anschließend Backslash mit Slash ersetzen. Dann sollte es eigentlich gehen. Wenn du eine .jar erzeugst, werden die Bilder auch geladen, wenn du folgende Methode anwendest.
Mein Problem besteht leider weiterhin mit genau der gleichen Exception die geworfen wird.
Hier zur Verdeutlichung der Verzeichnisstruktur nochmal ein Bild: (Sorry für die "Zensur", aber die Namen sind nicht öffentlich)
Fixe Pfade gehen leider nicht, da das ganze ein Maven&Git Projekt ist, und auf verschiedenen Rechnern unter verschiedenen Ordnern laufen soll.
Drei Sachen:
1. Werden die Bilder überhaupt in das bin Verzeichnis kopiert? Unwahrscheinlich das nicht, aber man muss ja aller Fehlerquellen ausschliesen.
2. Aus den Class#getResource hier zu lesenden Gründen, kann es nicht gehen, da immer noch in einem Unterordner von GUI gesucht wird.
3. Hast du meinen Vorschlag schon probiert? (
Ja die Bilder sind ins richtige Verzeichnis kopiert worden von eclipse "target/classes/GUIElements/..".
Auch den Vorschlag mit "/main/resources/GUIElements/btnXXX.png" hab ich probiert, allerdings funktioniert es dann immer noch nicht, in der Zeile "Icon icon = new ImageIcon(getClass().getResource(path));" der Methode loadIcon() tritt weiterhin eine NullPointerException auf.
OMG manchmal sieht man den Wald vor lauter Bäumen nicht...
Daran lag es wirklich! Allerdings hat sich jetzt ein weiteres Problem ergeben, und zwar wird das Bild versetzt gezeichnet. Wenn ich mit folgender Methode lade:
Moin,
dein Vorschlag führt zwar dazu, dass kein Rahmen mehr gezeichnet wird, allerdings ist rechts von dem Button dann ein schwarzer Punkt und das Icon ist immer noch links abgeschnitten.
Die Icons liegen im 16Bit/RGB-PNG Format vor. Und sie sind in genau der gleichen Größe wie die Buttons selbst.
... Moin
ich bin echt doof...
Es lag daran, dass noch Text auf dem Button stand, wenn ich den lösche klappts ohne Probleme.
Jetzt muss ich's nur noch hinkriegen, dass mein ImagePanel(erbt von JPanel) in der Lage ist sein Bild anzuzeigen ohne, dass ich erst minimieren/maximieren oder verschieben muss.
Ein einfaches repaint() scheint nicht zu funzen.
Wenn da jemnd grad ne Idee hat wäre ich wirklich dankbar, auch wenns nicht wirklich in diesen Thread gehört.
ich hab das problem, dass meine icons nicht angezeigt werden aufm button. ich habe sie über IMPORT von eclipse importieren lassen. diese sind im ordner workspace/meineprog/bin gelandet, also da wo auch die von eclipse erzeugten klassen liegen. ein einbinden in den button über
Java:
meinBtn.setIcon(newImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("test.png"))));// oder
meinBtn.setIcon(newImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("bin/test.png"))));// oder
meinBtn.setIcon(newImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/bin/test.png"))));
geht nicht. ich bekomme keinen fehler bei zeile 1, nur fehlt eben bei jedem button das bild.
bei den anderen zwei zeilen gibts ne NPE.
wo liegt da der fehler ?
Der Pfad war auch nur als Beispiel gedacht. Du bekommst die NPE, weil das Bild nicht am angegebenen Ort liegt.
Wo liegt dein Bild und wo die Klasse, in der du diesen Code schreibst? Schreibe mal die Pfade auf, oder mach mal ein Bild von den Pfaden, wie das Hering oben gemacht hat.
Nun müssen die Bilder aber auf jedem Rechner, der dein Programm ausführt an den angegebenen Verzeichnissen liegen.
Normalerweise legt man die Bilder mit in der Jar-Datei ab und referenziert sie, wie ich das oben gezeigt habe.