我正在尝试为我正在编程的小游戏在JFrame
上显示背景图像。图像是.jpg,我不断收到这些错误:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at web.game.Base.<init>(Base.java:45)
at web.game.Base.main(Base.java:61)
我的代码是:
Image myimage;
public Base() {
ImageIcon ii = new ImageIcon(this.getClass().getResource("myimage.jpg"));
myimage = ii.getImage();
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(myimage, 10, 10, null);
答案 0 :(得分:3)
您可能遇到问题的原因有很多。最明显的开始,图像不存在(或者至少不存在你认为它存在的地方)
private BufferedImage myImage;
public Board() {
try {
myimage = ImageIO.read(this.getClass().getResource("/myimage"));
} catch (IOException exp) {
exp.printStackTrace();
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (myImage != null) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(myimage, 10, 10, this);
System.out.println("Background Image");
}
}
您可能会发现某些用途Performing Custom Painting和Reading/Loading an Image。
使用getResource
时,您有两个(基本)选择。相对或绝对。
使用相对路径,类加载器将根据类的上下文开始搜索。因此,如果您的图像位于项目的根文件夹中,但您的类位于子文件夹(包)中,则相对路径将不起作用,因为类加载器将从类所在的位置开始搜索。
绝对路径允许您从类路径的根搜索,这将更有帮助,尤其是在您的情况下。
尝试这样的事情,看看你得到了什么..
System.out.println(TestReference.class.getResource("myimage.jpg"));
System.out.println(TestReference.class.getResource("/myimage.jpg"));