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) で java.lang.NullPointerException が発生しました。 java:125) で sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263) で sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205) で sun.awt.image.ImageFetcher.run(ImageFetcher)ジャワ: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 に答える