调用Graphics.drawImage时出现NullPointerException

时间:2014-05-18 01:09:27

标签: java image graphics nullpointerexception fullscreen

我正在运行运行java代码的NullPointerException。

此方法中的两行都出现错误:

    public void draw(Graphics g){
    g.drawImage(bg, 0, 0, 50, 0, null);
    g.drawImage(a.getImage(), 0, 0, 50, 0, null);
}

bg声明如下:

 bg = new ImageIcon("D:\\Eclipse\\Workspace\\Game\\src\\GameTest1\\back.png").getImage();

a是这个:

 private Animations a;

代码:

package GameTest1;

import java.awt.Image;
import java.util.ArrayList;

public class Animations {

    private ArrayList scenes;
    private int sceneIndex;
    private long movieTime;
    private long totalTime;

    //CONSTRUCTOR
    public Animations(){
        scenes = new ArrayList();
        totalTime = 0;
        start();
    }
    //adds screen to array list and adds time to things
    public synchronized void addScene(Image i, long t){ 
        totalTime += t;
        scenes.add(new OneScene(i, totalTime) );
    }
    //start animation from beginning
    public synchronized void start(){
        movieTime = 0;
        sceneIndex = 0;
    }
    //change scenes
    public synchronized void update(long timePassed){
        if(scenes.size() > 1){
            movieTime += timePassed;
            if(movieTime >= totalTime){
                movieTime = 0;
                sceneIndex = 0;
            }
            while(movieTime > getScene(sceneIndex).endTime){
                sceneIndex++;
            }
        }
    }
    //get current scene(image)
    public synchronized Image getImage(){
        if(scenes.size() == 0){
            return null;
        }else{
            return getScene(sceneIndex).pic;
        }
    }
    //get scene
    private OneScene getScene(int x){
        return (OneScene)scenes.get(x);
    }
    /////////////PRIVATE CLASSCEPTION///////////////
    private class OneScene{
    Image pic;
    long endTime;

    public OneScene(Image pic, long endTime){
        this.pic = pic;
        this.endTime = endTime;
    }

}
}

我知道nullPointerException是什么,所以请不要将我链接到描述其中的帖子。我的问题是我无法看到导致错误的原因。

2 个答案:

答案 0 :(得分:3)

你说:

  

此方法中的两行都出现错误:

public void draw(Graphics g){
    g.drawImage(bg, 0, 0, 50, 0, null);
    g.drawImage(a.getImage(), 0, 0, 50, 0, null);
}

这非常清楚地表示您传递给Graphics方法的draw()对象为null。检查调用draw()的代码行,并查看传递给它的Graphics对象为何为空。

你应该真正阅读post的答案,这个问题将不可避免地被标记为重复。您尚未学习如何调试NPE。

答案 1 :(得分:2)

您正在致电:

public void draw(Graphics g){
    g.drawImage(bg, 0, 0, 50, 0, null);
    g.drawImage(a.getImage(), 0, 0, 50, 0, null);
}

获得NullPointerException。首先,您必须找到抛出NPE的线,然后测试以查看什么是null。例如,如果它是方法的第一行:

public void draw(Graphics g){
    System.out.println("is g null? " + (g == null));
    System.out.println("is bg null? " + (bg == null));
    g.drawImage(bg, 0, 0, 50, 0, null);
    g.drawImage(a.getImage(), 0, 0, 50, 0, null);
}

然后,如果g为null,请回顾一下调用draw的位置,并查看如何获取Graphics对象。


修改
你说:

  

好的,找到我称之为draw的地方:Graphics2D g = screen.getGraphics();绘制(克);

什么是屏幕?如果它是一个组件,那么您在渲染之前尝试从中获取Graphics,它将为null。那不是你如何使用图形。您应该根据Swing painting tutorials绘制JPanel或JComponent覆盖的paintComponent方法。