2014-04-13 157 views
2

的原因不明,我有以下的代码,增加了JLabelsJPanel,然后这个JPanelJFrame,但我得到一个NullPointerException,我不能明白为什么。我的代码如下:空指针异常

public void createImage(String view) { 

      String [] viewSplit = view.split("(?!^)"); 

      if(viewSplit.length == 25) { 
       fiveByFiveLook.setLayout(null); 
       fiveByFiveLook.setBackground(Color.WHITE); 
       fiveByFiveLook.setBounds(48, 75, 404, 404); 
       fiveByFiveLook.setVisible(true); 


       ArrayList<String> viewArray = new ArrayList<String>(Arrays.asList(viewSplit)); 



       JLabel fiveByFiveLabels[][] = new JLabel[5][5]; 

       for(int i = 0, k = 0; i <= 4; i++, k = k + 80) { 
        for(int j = 0, l = 0; j <= 4; j++, l = l + 80) { 


         if(viewArray.get(0).equals("X")) { 
          fiveByFiveLabels[i][j].setIcon(new ImageIcon("Blank.jpg")); 
          fiveByFiveLook.add(fiveByFiveLabels[i][j]); 
          viewArray.remove(0); 
         } 
         else if(viewArray.get(0).equals("#")) { 
          fiveByFiveLabels[i][j].setIcon(new ImageIcon("Wall.jpg")); 
          fiveByFiveLook.add(fiveByFiveLabels[i][j]); 
          viewArray.remove(0); 
         } 
         else if(viewArray.get(0).equals(".")) { 
          fiveByFiveLabels[i][j].setIcon(new ImageIcon("Floor.jpg")); 
          fiveByFiveLook.add(fiveByFiveLabels[i][j]); 
          viewArray.remove(0); 
         } 
         else if(viewArray.get(0).equals("E")) { 
          fiveByFiveLabels[i][j].setIcon(new ImageIcon("Exit.jpg")); 
          fiveByFiveLook.add(fiveByFiveLabels[i][j]); 
          viewArray.remove(0); 
         } 
         else if(viewArray.get(0).equals("G")) { 
          fiveByFiveLabels[i][j].setIcon(new ImageIcon("Gold.png")); 
          fiveByFiveLook.add(fiveByFiveLabels[i][j]); 
          viewArray.remove(0); 
         } 
         fiveByFiveLabels[i][j].setBounds(l, k, 85, 85); 
        } 
       } 
       humanGameWindow.add(fiveByFiveLook); 
      } 

      else if(viewSplit.length == 49) { 

       sevenBySevenLook.setLayout(null); 
       sevenBySevenLook.setBackground(Color.WHITE); 
       sevenBySevenLook.setBounds(48, 75, 404, 404); 
       sevenBySevenLook.setVisible(true); 

       JButton sevenBySevenLabels[][] = new JButton[7][7]; 

       for(int i = 0, k = 0; i <= 6; i++, k = k + 57) { 
        for(int j = 0, l = 0; j <= 6; j++, l = l + 57) { 
         sevenBySevenLabels[i][j] = new JButton(); 
         sevenBySevenLabels[i][j].setBounds(l, k, 62, 62); 
         //sevenBySevenLabels[i][j].setIcon(new ImageIcon("Sword copy.jpg")); 
         sevenBySevenLook.add(sevenBySevenLabels[i][j]); 
        } 
       } 

       humanGameWindow.add(sevenBySevenLook); 
      } 
     } 

的错误是:

java.lang.NullPointerException 
    at dodGUI.createImage(dodGUI.java:324) 
    at dodGUI.handleResponse(dodGUI.java:61) 
    at dodGUI$1.run(dodGUI.java:79) 
    at java.lang.Thread.run(Thread.java:744) 
Null Pointer2: java.lang.NullPointerException 

并且在该行出现:

fiveByFiveLabels[i][j].setBounds(l, k, 85, 85); 

请可有人建议,为什么这是

:)

回答

3

该行

JLabel fiveByFiveLabels[][] = new JLabel[5][5]; 

创建一个可以容纳5x5标签的emtpy数组。但里面没有标签。所有阵列条目都是null

插入该行

for(int i = 0, k = 0; i <= 4; i++, k = k + 80) { 
    for(int j = 0, l = 0; j <= 4; j++, l = l + 80) { 

     fiveByFiveLabels[i][j] = new JLabel(); // <--- This one... 

和阅读http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html