2012-08-11 57 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