更改Java图标和工具栏图标

时间:2013-09-26 02:13:57

标签: java swing icons

我正在尝试使用此

更改Java图标和标题栏图标
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.KeyboardFocusManager;
import java.awt.Toolkit;
import java.util.Collections;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

@SuppressWarnings("all")
public class GameFrame extends JFrame
{
    JFrame frame = new JFrame();
    String title = Config.clientName + " Revision: " + Config.Revision + " Made by: " + Config.developerName;
    String betaTitle = Config.clientName + " Beta "+ "Revision: " + Config.Revision + " Made by: " + Config.developerName;
    String alphaTitle = Config.clientName + " Alpha "+ "Revision: " + Config.Revision + " Made by: " + Config.developerName;

    public GameFrame(GameShell rsapplet, int width, int height, boolean undecorative, boolean resizable) {
        rsApplet = rsapplet;
        //Config.ConfigLoad();
        if (Config.beta == 3){
            setTitle(alphaTitle);
        } else {
            setTitle(Config.beta == 1 ? title:betaTitle);
        }

        setIconImage(getToolkit().getImage(getClass().getResource(Signlink.findcachedir()+"/Sprites/Icons/icon.jpeg")));

//      //String imgURL = signlink.spritesLocation() + "this.jpg";
//      try {
//          setIconImage(new ImageIcon(imgURL).getImage());
//      } catch (Exception e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }
        setUndecorated(undecorative);
        setResizable(resizable);
        setVisible(true);
        Insets insets = this.getInsets();
        setSize(width + insets.left + insets.right, height + insets.top + insets.bottom);//28
        setLocation((screenWidth - width) / 2, (screenHeight - height) / 2);
        setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
        setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
        requestFocus();
        toFront();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBackground(Color.BLACK);
    }

    public int getFrameWidth() {
        Insets insets = this.getInsets();
        return getWidth() - (insets.left + insets.right);
    }

    public int getFrameHeight() {
        Insets insets = this.getInsets();
        return getHeight() - (insets.top + insets.bottom);
    }

    public GameFrame(GameShell rsapplet, int width, int height) {
        this(rsapplet, width, height, false,false);
    }

    public Graphics getGraphics() {
        Graphics g = super.getGraphics();
        Insets insets = this.getInsets();
        g.translate(insets.left ,insets.top);
        return g;
    }

    public void update(Graphics g)
    {
        rsApplet.update(g);
    }

    public void paint(Graphics g)
    {
        rsApplet.paint(g);
    }

    private final GameShell rsApplet;
    public Toolkit toolkit = Toolkit.getDefaultToolkit();
    public Dimension screenSize = toolkit.getScreenSize();
    public int screenWidth = (int)screenSize.getWidth();
    public int screenHeight = (int)screenSize.getHeight();
}

但是当我运行客户端时出现此错误,我做错了什么?

  

[客户端]:初始化客户端框架...    未捕获的错误提取图像:   显示java.lang.NullPointerException     at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:115)     at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:125)     at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)     at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)     at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)

1 个答案:

答案 0 :(得分:2)

而不是使用......

setIconImage(getToolkit().getImage(getClass().getResource(Signlink.findcachedir()+"/Sprites/Icons/icon.jpeg")));

尝试使用...

setIconImage(getToolkit().getImage(Signlink.findcachedir()+"/Sprites/Icons/icon.jpeg"));

String视为文件引用。类加载器不太可能解析您提供它的路径。

您最好还是尝试使用ImageIO来阅读图片,因为当出现问题时它会抛出IOException

有关详细信息,请参阅Reading/Loading an Image

从评论中更新

BufferedImage image = null; 
try {
    image = ImageIO.read(new File(Signlink.findcachedir()+"/Sprites/Icons/icon.jpeg"));
} catch (IOException e) {
    e.printStackTrace(); 
} 
frame.setIconImage(image);
frame.setVisible(true);