Reputation: 77
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
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