我正在运行运行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是什么,所以请不要将我链接到描述其中的帖子。我的问题是我无法看到导致错误的原因。
答案 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方法。