2013-06-29 3 views
9

Я искал всюду о том, как установить образ значка на Java, и он всегда заканчивается неработоспособным или он дает мне ошибки. Здесь, на мой основной метод, где я поставил код:Set Icon Image в 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); 

} 

Мой путь для изображения «% PROJECT%/RES/image.png», и я просто использовать /Image.png, чтобы идти вперед и доступ моя папка res (как я это делал в других частях моего проекта), я даже преобразовал ее в файл значка и попробовал это, но все, что он решает, - использовать значок Java по умолчанию.

+2

Об этом спрашивают примерно раз в 16 часов. Возможно, вы захотите выполнить поиск в будущем. –

+0

+1 комментарий @AndrewThompsons. Прочитайте [здесь] (http://stackoverflow.com/questions/13796331/jar-embedded-resources-nullpointerexception/13797070#13797070). он должен помочь вам решить большинство проблем с встроенными ресурсами в вашей банке. –

+0

Обратите внимание, что я удалил тэг [tag: set], так как ваш вопрос не имеет ничего общего с концепцией программирования «множеств» или коллекций в целом. Я добавил тег [tag: Swing], так как этот заголовок очень важен для вашего вопроса. –

ответ

8

Вашей проблемы часто из-за глядя в неправильном месте изображения, или если ваши классы и изображения находятся в файле фляга, то поиск файлов, где файлы дон не существует. Я предлагаю вам использовать ресурсы, чтобы избавиться от второй проблемы.

например,

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

, когда я использую это, он выдает ошибку в setIconImage, _ Метод setIconImage (Image) в типе JFrame не применим для аргументов (ImageIcon) _ , и он говорит, чтобы изменить его на setIconImages или изменить тип ImageIcon на изображение. – Shzylo

+0

@Shzylo: см. Изменение. –

+0

спасибо, что сработал :) просто нужно было положить кое-что в try/catch. – Shzylo

7

Использовать по умолчанию набора инструментов для этого

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

Это сработало, пока я не экспортировал свой файл jar. – Shzylo

+1

@Shzylo: не удивительно. –

0

Я использую это:

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

Просто поместите ваше изображение называется Icon.png в папке ресурсов и вызвать вышеописанный метод с собой в качестве параметра внутри класса, простирающегося класс от семейство Window, такое как JFrame или JDialog:

IconImageUtilities.setIconImage(this);