Wie zu set icon-Bild für eine swing-Anwendung?
Ich habe gesehen, viele verschiedene Beispiele, die zeigen, wie ein JFrame ist IconImage
so dass die Anwendung verwendet das Symbol anstelle des standard-Kaffeebecher. Keiner von Ihnen arbeiten für mich.
Hier "mein" code (stark entlehnt aus anderen posts und im internet):
public class MyApp extends JFrame
{
public MyApp()
{
ImageIcon myAppImage = loadIcon("myimage.jpg");
if(myAppImage != null)
setIconImage(myAppImage.getImage());
}
private ImageIcon loadIcon(String strPath)
{
URL imgURL = getResource(strPath);
if(imgURL != null)
return new ImageIcon(imgURL);
else
return null;
}
}
Dieser code nicht unten in loadIcon
wenn Sie einen Anruf tätigen, um die getResource()
Methode. Für mich gibt es nur 2 Möglichkeiten: (1) die myImage.jpg
ist im falschen Verzeichnis, oder (2) getResource()
mag es nicht, etwas über mein Bild (ich hatte es zu konvertieren von CMYK zu RGB in Photoshop so könnte ich das gleiche Bild an anderer Stelle mit ImageIO
.)
Habe ich die System.out.println(new File(".").getAbsolutePath());
trick, um suchen Sie das Verzeichnis, wo das Bild in JPG gespeichert werden soll, und noch nichts gearbeitet. Ich habe anschließend platziert die JPG-Datei in jedes Verzeichnis in meinem Projekt, nur um zu regieren Speicherort der Datei als die Täter.
So, dass hinterlässt bei mir zu glauben, dass es etwas gibt, dass getResource()
mag es nicht, über die JPG-Datei selbst. Aber ich habe jetzt schon erschöpft mein Verständnis von Bildern und Symbolen in der mächtigen, weiten Welt des Swing.
Meine JPG lädt Geldstrafe in anderen image-Viewern, so dass ausgeschlossen sowie. Jemand irgendwelche Ideen?
Vielen Dank im Voraus!
- Um zu überprüfen, ob das problem mit der URL versuchen:
System.out.println("estimated number of bytes in the file = " + imgURL.openStream().available());
. - Dank toto2 - nun endlich sind wir irgendwo immer! Diese Zeile wirft eine exception mit der Nachricht "null"... einfach der schlechteste und am wenigsten hilfreichen exception-Nachricht, die ich je gesehen habe. Irgendwelche Hinweise?
available
ist nicht ein rock-solid-Methode nach api, so können wir nicht schließen viel. Sie könnten versuchen, splitopenStream().avalaible()
über zwei verschiedene Linien zu sehen, wo der Fehler ist aus. Meine Vermutung ist, dass dein Bild ist in Ordnung, aber nicht gefunden werden kann. Da Sie über NetBeans, können Sie auch einen Blick auf dieses tutorial.- Warum tut man nichts für Sie arbeiten? Warum nicht die Vorschläge in diesem posting (stackoverflow.com/questions/7181699/...) für Sie arbeiten wenn Sie für alle anderen auch?? Warum kannst du nicht ein post SSCCE wie Sie schon gefragt worden zu tun vor??? Wir sind NICHT dagegen, die Leser, die wir nicht erraten können, warum es funktioniert, für alle anderen und nicht für Sie!!!
- Camickr bitte unterlassen Sie das posten von Antworten/Reaktionen auf meine Fragen in der Zukunft.
- Sorry, ich übel nehmen wenn die Leute weiterhin Fragen stellen, ohne alle notwendigen Informationen, die benötigt werden um das problem zu lösen. Sie weiter verschwenden die Zeit von jedem, der sich Zeit nimmt zum Lesen dieser Frage. Nicht nur, dass Sie die Nerven dazu haben, senden Sie mir eine direkte E-Mail von meinem blog um Hilfe zu bitten, wenn Sie nicht wollen, mir zu helfen, Ihr hier!
Du musst angemeldet sein, um einen Kommentar abzugeben.
setzen Sie das Bild in der root des classpath und sagen
getResource("classpath:myimage.jpg");
Das problem mit deinem code ist, dass die jvm ist sich nicht sicher, wo lookup die image-Datei, so dass seine Rückkehr null.
Hier ist ein netter link über classpath
Sollte es
statt
und
statt
Dann funktioniert es einwandfrei, wenn
"myimage.jpg"
ist in derselben dir mitMyApp.class
Habe ich versucht folgende war eine Antwort für die gleiche Art von Frage wie deine. Und es funktioniert für mich.
Zwei Vorschläge:
getClass().getResource("x.jpg")
, und setzen Sie die Datei direkt in den gleichen Ordner wie die.class
- Datei der Klasse, die Sie sind in.