繁体   English   中英

空指针异常?

[英]Nullpointer Exception?

嗨,我正在制作Java游戏,但出现以下错误:

actionPerformedException in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at OurGame.Ball.checkCollision(Ball.java:53)
    at OurGame.Ball.actionPerformed(Ball.java:57)
    at javax.swing.Timer.fireActionPerformed(Unknown Source)
    at javax.swing.Timer$DoPostEvent.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

当我的游戏检查球与其他物体之间是否发生碰撞时,就会发生这种情况。 这是我的“ Ball.java”代码

package OurGame;

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class Ball extends JPanel implements ActionListener {
/**
     * 
     */
    private static final long serialVersionUID = 1L;

    int x, y, cx, cy;

        Image img;
        ImageIcon i;

        Player p;
        Board b;

        Timer t;
        Random r;

        Rectangle player, ball;


        public Ball() {
            r = new Random();
            x = 500;
            y = 190;
            cx = -1;


            System.out.println("New coin created: " + x + ", " +y);

            i = new ImageIcon("ball.png");
            img = i.getImage();

            t = new Timer(10,this);
            t.start();
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.print("actionPerformed");
            checkCollision();
            move();
        }

        public void checkCollision(){

            player = new Rectangle(p.getX(),p.getY(),10,32);
            ball = new Rectangle(getX(),getY(),8,8);

            if (player.intersects(ball))
            {
               // A Collision!
               // we know which enemy (e), so we can call e.DoCollision();
               b.score += 1;


               if(cx == -1) {
                   cx = 1;
               } else {
                   if(cx == 1) {
                       cx = -1;
                   }
               }
               System.out.println("Collided");
            } else {
            }
        }


        public void move() {
            System.out.print("MOVING");
            x += cx;


        }

        public void setX(int xs) {
            x = xs;
        }

        public void setY(int ys) {
            y = ys;
        }
        public Image getImage(){
            return img;
        }

        public int getX(){
            return x;
        }

        public int getY() {
            return y;
        }


}

在以下代码处发生错误:

player = new Rectangle(p.getX(),p.getY(),10,32);

提前致谢。

您的Ball类有一个名为p的字段,其类型为Player

但是您永远不会为该字段分配值,因此该值始终为null

尝试在该null值上调用任何方法肯定会导致NullPointerException

要么需要确保为每个Ball分配了一个Player (最好是在构造过程中), 要么更改代码以解决缺少Player (即在适当的地方检查是否为null )。

另外, Rectangle字段playerball似乎仅在checkCollision方法中使用,因此应该是在该方法中声明的局部变量,而不是字段。

您确定为Ball的“ p”(玩家)设置值吗? 'p'未初始化。

变量p尚未初始化。 应该在哪里?

您有一个null 此链接将向您解释java NullPointerException的含义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM