线程“main”中的异常Java.lang.nullPointerException错误?

时间:2012-02-19 14:31:46

标签: java class

我收到以下错误:

Exception in thread "main" java.lang.NullPointerException
    at BallContainerImage.update(BallContainerImage.java:101)
    at BallContainer.addBall(BallContainer.java:93)
    at Game.ejectBall(Game.java:92)
    at LotteryTestB.main(LotteryTestB.java:19)

第19行包含:

      dramaticGame1.ejectBall();

戏剧游戏类包含以下内容:

public class DramaticMachine extends Machine
{
  // Constructor is given the person's name.
  public DramaticMachine(String name, int length)
  {
    super(name, length);
  }


  public Ball ejectBall()
  {          
    if (getNoOfBalls() >= 0)
      return null;
    else
    {
      //Math.random() * getNoOfBalls yields a number
      //which is >=0 and < number of balls.
      int ejectedBallIndex = (int) (Math.random() * getNoOfBalls());

      for (int selectedBallIndex = 0; selectedBallIndex < ejectedBallIndex; selectedBallIndex++) 
  {
    Ball selectedBall = getBall(selectedBallIndex);
    selectedBall.flash(4, 5);
  }

  Ball ejectedBall = getBall(ejectedBallIndex);
  ejectedBall.flash(4, 5);

  swapBalls(ejectedBallIndex, getNoOfBalls() -1);
  removeBall();

  return ejectedBall;


}//else
  }//ejectBall


  public String getType()
  {
    return "Dramatic Lottery Machine";
  }//getType
}//dramaticMachine

我该如何解决这个问题?

这是DramaticGame类的代码:

public class DramaticGame extends Game
{
  // Constructor is given the person's name.
  public DramaticGame(String machineName, int machineSize, String rackName, int
  rackSize)
  {
    super(machineName,machineSize,rackName,rackSize);

  }

  public Machine makeMachine(String machineName, int machineSize)
  {
    return new DramaticMachine(machineName, machineSize);
  }//makeMachine
}

这是LotteryTestB的代码:

public class LotteryTestB
{
  public static void main (String args[])
  {
    SpeedController speedController
      = new SpeedController(SpeedController.HALF_SPEED);
    LotteryGUI gui = new LotteryGUI("TV Studio", speedController);

    Worker worker = new TraineeWorker("Jim",0);

    DramaticGame dramaticGame1 = new DramaticGame("Lott O'Luck Larry", 49,
                                              "Slippery's Mile", 7);
    gui.addGame(dramaticGame1);

    worker.fillMachine(dramaticGame1);

    for (int count = 1; count <=dramaticGame1.getRackSize(); count++)
    {
      dramaticGame1.ejectBall();
      speedController.delay(40);
    }//for

}//main
}//LotteryTestB

1 个答案:

答案 0 :(得分:2)

NullPointerException是追逐的更容易的问题之一。这意味着某些引用未正确初始化。通过使用调试器单步调试代码应该很容易理解。

如果您无法使用调试器,堆栈跟踪可以让您轻松完成。只有四个地方可以看,它确切地说明了它们的位置。

at BallContainerImage.update(BallContainerImage.java:101)
at BallContainer.addBall(BallContainer.java:93)
at Game.ejectBall(Game.java:92)
at LotteryTestB.main(LotteryTestB.java:19)

不是最底层的。对dramaticGame的引用是该行中唯一的一个,并且您调用new来初始化它。继续下一个。添加日志或打印语句以证明空引用的位置,然后进行正确初始化。

我认为您的代码没有正确分层。除非你能将问题分解成更小的块,然后对它们进行单元测试直到它们工作,然后使用该代码构建复杂的解决方案,否则你永远不会得到这个工作。

将UI与游戏本身分开。让游戏正常运行,然后担心显示问题。