簡體   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