java,img.getWidth(null);为什么会报出空指针异常 5C

package Plane;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;

import Util.GameUtil;

public class Plane {
double x,y;
Image img;
boolean left,right,up,down;
double speed = 10;
int width ;
int height ;

/**
 * Rectangle类,新建一个矩形
 * @return
 */
public Rectangle getRect() {
    Rectangle rect = new Rectangle((int)x,(int)y,width,height);
    return rect;
}
public void draw(Graphics g) {
    g.drawImage(img, (int)x, (int)y, null);
    move();
}

public Plane(String imgPath , double x, double y) {
    super();
    this.x = x;
    this.y = y;
    this.width = img.getWidth(null);
    this.height = img.getHeight(null);

    this.img = GameUtil.getImage(imgPath);

}
public void move () {
    if(left) {
        x -= speed;
    }
    if(right) {
        x += speed;
    }
    if(up) {
        y -= speed;
    }
    if(down) {
        y += speed;
    }
}
public void addDirection(KeyEvent e) {
    switch(e.getKeyCode()) {
    case KeyEvent.VK_LEFT:
        left = true;
        break;
    case KeyEvent.VK_RIGHT:
        right = true;
        break;
    case KeyEvent.VK_UP:
        up = true;
        break;
    case KeyEvent.VK_DOWN:
        down = true;
        break;
    default:
        break;

    }       
}
public void releaseDirection(KeyEvent e) {
    switch(e.getKeyCode()) {
    case KeyEvent.VK_LEFT:
        left = false;
        break;
    case KeyEvent.VK_RIGHT:
        right = false;
        break;
    case KeyEvent.VK_UP:
        up = false;
        break;
    case KeyEvent.VK_DOWN:
        down = false;
        break;
    default:
        break;

    }

}

}
package Plane;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

import Util.GameUtil;
import Util.MyFrame;

public class PlaneFrame extends MyFrame{
Image bg = GameUtil.getImage("Image/bg.jpg");
Plane plane = new Plane("Image/plane.png", 300, 600);

ArrayList bulletList = new ArrayList(); 
public void paint(Graphics g) {
    g.drawImage(bg, 0, 0, null);
    plane.draw(g);
    for(int i=0;i<bulletList.size();i++) {
        Bullet b = (Bullet) bulletList.get(i); //get()返回此列表中指定位置的元素。 
        b.draw(g);

        //碰撞检测,每次画一个球就检测是否与飞机发生碰撞
        boolean impact = b.getRect().intersects(plane.getRect());//比较两个矩形是否相交
        if(impact) {
            System.out.println("sssssss");
        }
    }



}

 class KeyMonitor extends KeyAdapter {
        @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("按下"+e.getKeyCode());

        plane.addDirection(e);

    }
    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("松开"+e.getKeyCode());
        plane.releaseDirection(e); //自己的理解,不写这个将方向改为false的方法的话,。。。。写了的话将就代表调用了move的方法
        //**不是很懂松开这个建不写方法就有问题

    }
};

public void LoadFrame() {
    super.LoadFrame();
    addKeyListener(new KeyMonitor());  
    /*addKeyListener
    public void addKeyListener(KeyListener l)

    for(int i=0;i<60;i++) {
        Bullet bll = new Bullet();
         bulletList.add(bll); 


    }

}
public static void main(String[] args) {
    new PlaneFrame().LoadFrame();
}

}

错误:file:/G:/develop/java1/SXTPlane/bin/Image/bg.jpg
Exception in thread "main" java.lang.NullPointerException
at Plane.Plane.(Plane.java:35)
at Plane.PlaneFrame.(PlaneFrame.java:14)
at Plane.PlaneFrame.main(PlaneFrame.java:71)

为什么img.getWidth(null);会报出空指针异常,图片是正常加载的,那为什么用对象来获取图片的长和高就报出空指针呢,萌新,不是很懂

3个回答

额,没有看具体代码,看题目有点问题,getWidth(null),给你报个空指针正常吧,你可以试试不加参数。

你贴的代码还不够用,只能从这几个方面猜一把:
1. img 变量是null(
看看是不是赋值过, if(img==null) System.out.println("图片未加载成功")

2. 图片没加载完毕(线程暂停1秒)

另外:
正在自学吧,刚开始入门吧?
java 怎么能从 awt 入手呢,java 不适合桌面编程,改 Java Web 吧。

qq_37260235
pursueone g.drawImage(img, (int)x, (int)y, null);而且我用的这句话画的这个类的图,能画出来应该代表img是不为空的吧
2 年多之前 回复
qq_37260235
pursueone img应该不是空的,我试着打印了,没有出现为空,然后其他的就不怎么懂了,恩,学了点基础就想跟着视频做点东西,我知道不适合做桌面编程,就是想培养一下兴趣先,还没学到web,,嘿嘿
2 年多之前 回复

你贴的代码还不够用,只能从这几个方面猜一把:
1. img 变量是null(
看看是不是赋值过, if(img==null) System.out.println("图片未加载成功")

2. 图片没加载完毕(线程暂停1秒)

另外:
正在自学吧,刚开始入门吧?
java 怎么能从 awt 入手呢,java 不适合桌面编程,改 Java Web 吧。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐