0

我正在尝试使用此更改 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();
}

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

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

4

1 回答 1

2

而不是使用...

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

尝试使用...

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

它将String作为文件参考。类加载器不太可能解析您提供的路径。

您最好尝试使用ImageIO来阅读您的图像,因为它会在出现问题时抛出一个IOException

有关详细信息,请参阅读取/加载图像

从评论更新

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); 
于 2013-09-26T02:29:52.053 回答