pursueone 2018-03-06 10:02 采纳率: 0%
浏览 1893
已结题

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

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),给你报个空指针正常吧,你可以试试不加参数。

    评论

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用