2012-08-11 71 views
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 
} 

回答

0

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

宣布他们在开始时应该这样做。

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

UPDATE

你也应该更新您的变量isCharactereMenuisMainMenu withing运行功能 - 例如宣布charMenu后 - 设置isCharactereMenu为true

+0

会发生什么事,然后是创建两个菜单同时互相叠加而不是在被呼叫时分开创建。 – cjr 2012-08-11 23:05:02

+0

哦,我只是想着abt解决NPE ......让我再看看你的代码的实际逻辑 – MimiEAM 2012-08-11 23:08:03

+0

是的,它解决了NPE但创建了一个不同的问题。基本上,我试图做的是有2个不同的菜单,可以访问对方。 – cjr 2012-08-11 23:09:22