0

所以我对我目前正在制作的塔防游戏有疑问。我已经在下面发布了我遇到错误的部分代码。

它的概要是我用 mainMenu 开始游戏,它有一个按钮可以进入 charMenu 或退出游戏。这个屏幕加载得很好。

现在,当我单击进入 charMenu 时,我在“charMenu.draw(g)”行上收到 NullPointerException。如果我只创建一个菜单并删除另一个菜单的代码,那么两者都可以正常工作,但是如果我尝试为它们都启用代码,我会收到错误并且无法调试它可以做什么是。

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

您正在对空引用 ( charMenu ) 调用方法 (draw () ),这就是触发 NPE 的原因。

在开始时声明它们应该这样做。

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

更新

您还应该更新您的变量isCharactereMenuisMainMenu使用 run 函数 - 例如在声明之后charMenu- 设置isCharactereMenu为 true

于 2012-08-11T22:30:22.817 回答