0

現在作成中のタワーディフェンスゲームで困っています。エラーが発生しているコードの一部を以下に投稿しました。

その要約は、charMenu に入るボタンまたはゲームを終了するボタンがある mainMenu でゲームを開始することです。この画面は完全に正常に読み込まれます。

クリックして charMenu に移動すると、「charMenu.draw(g)」の行で NullPointerException が発生します。メニューの 1 つだけを作成し、もう 1 つのコードを削除すると、両方で正常に動作しますが、両方のコードを有効にしようとすると、エラーが発生し、デバッグしても何ができるかわかりません。なれ。

public class Screen extends JPanel implements Runnable {

public static boolean isMainMenu = true;
public static boolean isCharacterMenu = false;
public static MainMenu mainMenu;
public static CharMenu charMenu;

public void paintComponent(Graphics g) {

if(isMainMenu && !isCharacterMenu){ // Draws the Main Menu
        mainMenu.draw(g);
    }
    if(isCharacterMenu && !isMainMenu){
        charMenu.draw(g);
    }
    if(!isMainMenu && !isCharacterMenu){
        //draws the actual game board.
    }
}

public void run() {
    while(true) {
        if(isMainMenu && !isCharacterMenu){//The Main Menu
            mainMenu = new MainMenu();
        }
        if(isCharacterMenu && !isMainMenu)
            charMenu = new CharMenu();
        if(!isMainMenu && !isCharacterMenu) {
             //runs the game board
}
4

1 に答える 1

0

null参照(charMenu)でメソッド(draw())を呼び出しているため、NPEがトリガーされます。

最初にそれらを宣言することはそれをするべきです。

public static MainMenu mainMenu =  new MainMenu();
public static CharMenu charMenu = new CharMenu();

アップデート

また、変数isCharactereMenuを更新isMainMenuし、実行関数を使用して(たとえば、宣言した後) trueにcharMenu設定する必要があります。isCharactereMenu

于 2012-08-11T22:30:22.817 に答える