2012-02-19 5 views
0

例外Java.lang.nullPointerExceptionエラー?私は次のエラーを取得しています

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 
+0

完全なスタックトレースを表示してください。さらに多くのコードが必要になるでしょう['getNoOfBalls()は何ですか? 'getBall()'とは何ですか? ...] – amit

+2

dramaticGame1変数がnullのようですが、この変数が作成されたコードを入力してください。 – Don

+0

コード – AkshaiShah

答えて

2

NullPointerExceptionが追いかけるする簡単な問題の一つです。これは、一部のリファレンスが正しく初期化されなかったことを意味します。デバッガでコードをステップ実行することで簡単に理解できるはずです。

デバッガを使用できない場合は、スタックトレースを使用して簡単に実行できます。見える場所は4つしかなく、正確にはどこにいるのかが分かります。

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を呼び出して初期化します。次のものに進みなさい。 null参照がどこにあるかを証明するためにログまたはプリントステートメントを追加して、適切に行って初期化します。

コードが適切に階層化されているとは思われません。問題を小さなチャンクに分解し、作業するまで単体テストしてから、そのコードを使用して複雑なソリューションを構築することができない限り、この作業を行うことはありません。

ゲーム自体からUIを分離します。ゲームの作業をして、ディスプレイの問題を心配してください。

+0

+1:私は自分のコードをデバッグするためにデバッガを使用しない頻度を驚かせています。ボタンをクリックしてください。) –

+0

IntelliJコミュニティ版を入手してください。この問題は5分でソートされます。 – duffymo

+0

私はIntelliJ CEも好んでいますが、netbeans、eclipse、その他多くのものもデバッグできます。 –

関連する問題