2013-06-29 4 views
9

Ho cercato dappertutto come impostare l'immagine dell'icona in Java e finisce sempre per non funzionare o mi dà errori. Qui, nel mio metodo principale è dove ho messo il codice:Imposta immagine icona 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); 

} 

Il mio percorso per l'immagine è "% PROGETTO%/res/Image.png" e mi basta usare /Image.png di andare avanti e di accesso la mia cartella di ricerca (come ho fatto in altre parti del mio progetto) l'ho persino convertita in un file di icona, e l'ho provata, ma tutto ciò che decide è usare l'icona Java predefinita.

+2

Questo viene chiesto circa una volta ogni 16 ore. Potresti voler cercare in futuro. –

+0

+1 al commento @AndrewThompsons. Leggi [qui] (http://stackoverflow.com/questions/13796331/jar-embedded-resources-nullpointerexception/13797070#13797070). dovrebbe aiutarti a risolvere la maggior parte dei problemi relativi alle risorse incorporate nel tuo contenitore. –

+0

Tieni presente che ho eliminato il tag [tag: set] poiché la tua domanda non ha nulla a che fare con il concetto di programmazione di "set" o raccolte in generale. Ho aggiunto il tag [tag: Swing] poiché questa intestazione è molto pertinente alla tua domanda. –

risposta

8

Il tuo problema è spesso dovuto guardare nel posto sbagliato per l'immagine, o se le vostre classi e le immagini sono in un file jar, quindi alla ricerca di file in cui i file don esiste Suggerisco di utilizzare le risorse per sbarazzarsi del secondo problema.

ad esempio,

// 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

quando lo uso getta un errore su setIconImage, _Il metodo setIconImage (Immagine) nel tipo JFrame non è applicabile per gli argomenti (ImageIcon) _ e dice di cambiarlo in setIconImages o di cambiare il tipo ImageIcon in Immagine. – Shzylo

+0

@Shzylo: vedere il cambiamento. –

+0

grazie che ha funzionato :) ho solo dovuto mettere alcune cose in un try/catch. – Shzylo

7

toolkit Usa predefinito per questo

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

Questo ha funzionato fino a quando non ho esportato il mio file jar. – Shzylo

+1

@Shzylo: nessuna sorpresa lì. –

0

Io uso questo:

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(); 
     } 
    } 
} 

Basta posizionare la vostra immagine chiamato Icon.png nella cartella risorse e chiamare il metodo di cui sopra con se stesso come parametro all'interno di un classe che estende una classe la Window famiglia come JFrame o JDialog:

IconImageUtilities.setIconImage(this);