0

私はJavaでゲームを作ろうとしています.ゲームでは、「ピンコ」と呼ばれる横に動くオブジェクトが、上下の矢印キーを押すと「ペレット」と呼ばれる小さなオブジェクトを発射するはずです。正常にコンパイルおよび実行されますが、上矢印キーまたは下矢印キーを押すたびに、次のエラーが表示されます。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Pinko.move(Pinko.java:75)
    at A2JPanel.actionPerformed(A2JPanel.java:102)
    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.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(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)

Application、Constants、JFrame、JPanel、Lovely、Pellet、Pinko の 7 つのクラスがあります。

Pinko クラスの move メソッドのコードは次のようになります。

public void move(){
    area.x -= speed;
    if(area.x <= PINKO_MOVE_AREA_LHS || area.x >= PINKO_MOVE_AREA_RHS){
      speed = -speed;
    }
    if( pelletsFired > 0 ){
      for (int i = 0; i < pelletsFired; i++){
        pellets[i].move();
      }
    }
  } 

JPanel クラスの ActionPerformed メソッドは次のようになります。

public void actionPerformed(ActionEvent e){
    createLovely();
    if(numberOfLovelies > 0){
      for (int i = 0; i < numberOfLovelies; i++){
        lovelies[i].move();
      }
    }
    pinko.move();
    repaint();
  }

上記のエラーが発生し続ける理由がわかりません。Pinko クラスの move() メソッドの for ループに何か問題がありますか?? どんな助けでも大歓迎です...

4

2 に答える 2

1

ここで NullPointerException が発生するに違いありません。

pellets[i].move();

次のことを確認してみましたか:

  • 配列が初期化されました
  • 参照されているインデックスには、あなたの Pellet クラスになると思われるもののインスタンスが含まれています
于 2013-06-10T07:30:55.317 に答える
0

IDE を使用している場合は、デバッガーを使用して、コードの何が問題なのかを理解してください。それ以外の場合は、いくつかのトレースをデバッグして問題を解決するのに役立ちます。試すことができる更新されたコードは次のとおりです。

public void actionPerformed(ActionEvent e){ createLovely();

 if(numberOfLovelies > 0){
  for (int i = 0; i < numberOfLovelies; i++){
    if(lovelies[i] != null )
        lovelies[i].move();
    else
        System.out.println("ERROR: Null lovelies found at an index : " + i);
  }
}
if(pinko != null)
    pinko.move();
else {
   System.out.println("OOPS pinko is null");
}

repaint();

}

于 2013-06-10T07:40:25.443 に答える