0

Alrighty,這裏第一篇文章使我大喊如果我做錯了什麼,但我有以下代碼,嘗試是使一個區域建造一種交易的那些老的一個學校圈泥。但是我不斷收到一些空指針錯誤。我一派,並修改了對這個問題小時,我想是時候給別的東西一試:P的Java空指針異常的多維數組

這樣做的目的是創建一個三維數組存儲室的實例。如果您熟悉泥地的房間有一系列詞綴,特別是這個詞彙的三維網格,每個房間的座標都可以通過圖形的藝術標籤。該陣列然後將被用於顯示JPanel上每個高度的地板的二維網格,其中標籤圖片基於房間的出口狀態。問題似乎是,要麼是a。構造函數沒有設置我似乎不太可能的變量b。我用它錯了(很可能因爲我不熟悉java)或c。我忽略了一些非常容易的錯誤。

的誤差隨時來我嘗試了房間類中訪問變量。

package battle.org; 

public class GUI extends JFrame { 

public class Rooms{ 
    String Rt; 
    String desc; 
    boolean dark;  
    boolean indoors;  
    boolean nomob;  
    boolean peace;  
    boolean soundproof; 
    boolean notrack; 
    boolean nomag; 
    boolean tunnel; 
    boolean notify;  
    boolean SF;   
    boolean FF;   
    boolean noport;  
    boolean noquit;  
    boolean exitu;  
    boolean exitd;  
    boolean onmap;  
    boolean exitud;  
    boolean exite;  
    boolean exitw;  
    boolean exits;  
    boolean exitn; 

    public Rooms(){ 
     String Rt = "Room Name"; 
     String desc = "Default Description"; 
     dark  = false; 
     indoors = false; 
     nomob  = false; 
     peace  = false; 
     soundproof = false; 
     notrack = false; 
     nomag  = false; 
     tunnel  = false; 
     notify  = false; 
     SF   = false; 
     FF   = false; 
     noport  = false; 
     noquit  = false; 
     exitu  = false; 
     exitd  = false; 
     onmap  = false; 
     exitud  = false; 
     exite  = false; 
     exitw  = false; 
     exits  = false; 
     exitn  = false; 
    }  
} 

private JPanel contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       GUI frame = new GUI(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public GUI() { 

    final int MAXxy = 10; 
    final int MAXz = 1; 
    int z; 
    Rooms[][][] a = new Rooms[MAXxy][MAXxy][MAXz]; 
// for(int x = 0; x < MAXxy; x++){ 
//  for(int y = 0; y < MAXxy ; y++){ 
//   for(z = 0; z < MAXz; z++){ 
//    a[x][y][z] = new Rooms(); 
//   } 
//  } 
// } 

//Labels to be displayed in grid 
JLabel room = new JLabel(new ImageIcon("C:\\Users\\Owner\\Desktop\\room.jpg")); 
JLabel nothing = new JLabel(new ImageIcon("C:\\Users\\Owner\\Desktop\\empty.jpg")); 
JLabel up = new JLabel(new ImageIcon("C:\\Users\\Owner\\Desktop\\up.jpg")); 
JLabel down = new JLabel(new ImageIcon("C:\\Users\\Owner\\Desktop\\down.jpg")); 


      //Error here wont let me access the boolean 
    a[0][0][0].onmap = true; 
    int x, y; 
    x =0; y =0; z = 0; 
    if(a[0][0][0].onmap){ 
     System.out.print("X = " + x + " Y = " + y + " Z = " + z + ""); 
     contentPane.add(down, new GridBagConstraints(x, y, 1, 1, 0.0, 0.0 ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); 
    } 


    //Displays Altitude level z 
    z = 0; 
/* for(int x = 0; x < MAXxy; x++){ 
     for(int y = 0; y < MAXxy ; y++){ 
      if(a[0][0][0].onmap){ 
       contentPane.add(down, new GridBagConstraints(x, y, 1, 1, 0.0, 0.0 ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); 
      } 
     } 
    }*/ 
} 
} 

錯誤列表:

java.lang.NullPointerException 
    at battle.org.GUI.<init>(GUI.java:189) 
    at battle.org.GUI$1.run(GUI.java:77) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

GUI frame = new GUI();是線77 – Phenom

回答

1

你的陣列是全空的,因爲你已經註釋掉,你客房對象填充位。

+0

是的事實證明我是一個愚蠢的,格拉西亞斯先生。只是澄清,但你必須運行構造函數正確?我通常使用C++,並在那裏我相信構造函數被自動調用,是不是在java的情況? – Phenom

+0

不客氣。是的,你必須明確地打電話給他們。 – weston

+0

WAT ???運行構造函數? –

0

這裏的問題:你初始化數組Rooms[][][] a但它從來沒有初始化的任何值。因此,執行此行

a[0][0][0].onmap = true; 

結果爲NullPointerException

確保初始化數組中的元素。基本示例:

for(int i = 0; i < MAXxy;i++) { 
    for(int j = 0; j < MAXxy; j++) { 
     for(int k = 0; k < MAXz; k++) { 
      a[i][j][k] = new Rooms(); 
     } 
    } 
} 

順便說一句,您有一個類似的代碼,但被評論。確保取消註釋或使用提供的代碼。