2011-12-18 54 views
1

我試圖通過使用2d數組繪製基本上棋盤圖案到屏幕上,並在當前座標上繪製10x10像素塊(基於從陣列位置讀取什麼字符) 。我想這是所有相關的問題代碼:試圖畫到畫布時得到一個nullpointerexception錯誤

public void paint(Graphics g) { 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g.fillRect(0, 0, this.getWidth(),this.getHeight()); 
     for(int x = 0;x<=3;x++){ 
      for(int y = 0;y<=3;y++){ 
           // NPE occurs on this line: 
       if (globalmap[x][y] == '1'){g2d.fillRect(10*y, 10*x, 10,10);} 
      } 
     } 
} 

這是地圖數組:

0000 
0011 
0100 
0000 

堆棧跟蹤:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
     at com.side.side.GameEngine.paint(GameEngine.java:64) 
     at javax.swing.JComponent.paintChildren(Unknown Source) 
     at javax.swing.JComponent.paint(Unknown Source) 
     at javax.swing.JComponent.paintChildren(Unknown Source) 
     at javax.swing.JComponent.paint(Unknown Source) 
     at javax.swing.JLayeredPane.paint(Unknown Source) 
     at javax.swing.JComponent.paintChildren(Unknown Source) 
     at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
     at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
     at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) 
     at javax.swing.RepaintManager.paint(Unknown Source) 
     at javax.swing.JComponent.paint(Unknown Source) 
     at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) 
     at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) 
     at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) 
     at java.awt.Container.paint(Unknown Source) 
     at java.awt.Window.paint(Unknown Source) 
     at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
     at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
     at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source) 
     at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) 
     at java.awt.event.InvocationEvent.dispatch(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) 

64號線:

if (globalmap[x][y] == '1') { g2d.fillRect(10*y, 10*x, 10,10); } 
+6

......哪條線是線64? – 2011-12-18 15:33:47

+2

你確定globalmap不是null嗎? – 2011-12-18 15:37:07

+2

說真的,第64行是什麼?你知道我們看不到你的顯示器,對吧? – 2011-12-18 15:51:07

回答

1

可能是你的全局映射數組元素是空的,但很難根據你發佈的內容來判斷。請注意,此行是可怕的:

if (globalmap[x][y] == '1'){g2d.fillRect(10*y, 10*x, 10,10);} 

您需要如果只用於調試目的傳播這一點上幾行:

if (globalmap[x][y] == '1') { 
    g2d.fillRect(10*y, 10*x, 10,10); 
} 
+0

發現將值分配給永不執行的全局映射的函數。非常感謝你指出這一點,除了幫助我的壞習慣外。 – purpleladydragons 2011-12-18 16:08:59

+1

@purpleladydons:aha,很高興你有它的工作。對於這種類型的問題,我有時在拋出NPE的行上添加println語句來查看錯誤,像'System.out.println(「globalmap is null:」+(globalmap == null));'' System.out.println(「globalmap [x] [y]爲null:」+(globalmap [x] [y] == null));'等等......這就是爲什麼println有時被稱爲「窮人男人的調試器「。您也可以使用大多數IDE的調試功能。 – 2011-12-18 16:11:10