Ravekitty
Ravekitty

Reputation: 77

Changing the Java Icon and ToolBar Icon

I'm trying to change the Java icon and the title bar icon using this

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

But I get this error when I run the client, what am I doing wrong?

[CLIENT]: Client frame initialized... Uncaught error fetching image: 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)

Upvotes: 0

Views: 1073

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347184

Instead of using...

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

Try using...

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

Which will treat the String as file reference. It is unlikely that the class loader can resolve the path you providing it.

You would also be better off trying to use ImageIO to read your images as it will throw an IOException when something goes wrong.

See Reading/Loading an Image for more details

Updated from comments

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

Upvotes: 2

Related Questions