2013-06-29 11 views
9

Ich habe überall auf der Suche nach dem Symbol Bild in Java, und es funktioniert immer funktioniert nicht oder es gibt mir Fehler. Hier in meiner Haupt-Methode ist, wo ich den Code setzen:Set Icon Bild in Java

public static void main(String[] args) { 
    Game game = new Game(); 

    // This right here! 
    game.frame.setIconImage(new ImageIcon("/Icon.png").getImage()); 

    game.frame.setResizable(false); 
    game.frame.setTitle(title); 
    game.frame.add(game); 
    game.frame.pack(); 
    game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    game.frame.setLocationRelativeTo(null); 
    game.frame.setVisible(true); 

} 

Mein Weg für das Bild ist „% PROJECT%/res/Image.png“ und ich verwende /Image.png nur voran zu gehen und Zugang mein Res-Ordner (wie ich es in anderen Teilen meines Projekts getan habe) Ich habe es sogar in eine Icon-Datei umgewandelt und habe das versucht, aber alles, was es entscheidet, ist das Standard-Java-Icon.

+2

Dies wird etwa einmal alle 16 Stunden gefragt. Vielleicht möchten Sie in Zukunft suchen. –

+0

+1 zu @AndrewThompsons Kommentar. Lesen Sie [hier] (http://stackoverflow.com/questions/13796331/jar-embedded-resources-nullpointerexception/13797070#13797070). Es sollte Ihnen bei den meisten Problemen eingebetteter Ressourcen in Ihrem Jar helfen. –

+0

Bitte beachten Sie, dass ich Ihr [tag: set] -Tag gelöscht habe, da Ihre Frage nichts mit dem Programmierkonzept von "Sets" oder Sammlungen im Allgemeinen zu tun hat. Ich habe das Tag [tag: Swing] hinzugefügt, da diese Überschrift für Ihre Frage sehr relevant ist. –

Antwort

8

Ihr Problem ist oft durch an der falschen Stelle für das Bild zu suchen, oder wenn Sie Ihre Klassen und Bilder in einer JAR-Datei sind, sucht dann nach Dateien, wo don-Dateien Ich existiere nicht. Ich schlage vor, dass Sie Ressourcen verwenden, um das zweite Problem loszuwerden.

zB

// the path must be relative to your *class* files 
String imagePath = "res/Image.png"; 
InputStream imgStream = Game.class.getResourceAsStream(imagePath); 
BufferedImage myImg = ImageIO.read(imgStream); 
// ImageIcon icon = new ImageIcon(myImg); 

// use icon here 
game.frame.setIconImage(myImg); 
+0

Wenn ich dies verwende, wirft es einen Fehler bei setIconImage, _Die Methode setIconImage (Image) im Typ JFrame ist nicht anwendbar für die Argumente (ImageIcon) _ und es heißt, es zu setIconImages oder den Typ ImageIcon zu Image ändern. – Shzylo

+0

@Shzylo: siehe ändern. –

+0

danke das hat funktioniert :) musste nur ein paar Sachen in einen Versuch/fangen. – Shzylo

7

Standard verwenden Toolkit für dieses

frame.setIconImage(Toolkit.getDefaultToolkit().getImage("Icon.png")); 
+0

Das funktionierte, bis ich meine JAR-Datei exportiert habe. – Shzylo

+1

@Shzylo: keine Überraschung dort. –

0

Ich benutze diese:

import javax.imageio.ImageIO; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.io.InputStream; 

public class IconImageUtilities 
{ 
    public static void setIconImage(Window window) 
    { 
     try 
     { 
      InputStream imageInputStream = window.getClass().getResourceAsStream("/Icon.png"); 
      BufferedImage bufferedImage = ImageIO.read(imageInputStream); 
      window.setIconImage(bufferedImage); 
     } catch (IOException exception) 
     { 
      exception.printStackTrace(); 
     } 
    } 
} 

einfach Ihr Bild Icon.png in den Ordner Ressourcen und rufen Sie das obige Verfahren mit sich selbst als Parameter in einer Klasse mit dem Namen einer Klasse, der sich von die Window Familie wie JFrame oder JDialog:

IconImageUtilities.setIconImage(this);