2011-12-18 5 views
1

2 차원 배열을 사용하고 배열 위치에서 읽은 문자를 기반으로 현재 좌표에서 10x10 픽셀 블록을 그림으로써 본질적으로 바둑판 패턴을 페인트하려고합니다. .캔버스에 그릴 때 nullpointerexception 오류가 발생합니다.

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); } 
이지도 배열입니다

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);} 
      } 
     } 
} 

:이 문제와 관련된 모든 코드라고 생각합니다

+6

... 어떤 라인은 라인 64? –

+2

globalmap이 null이 아닌 것은 확실합니까? –

+2

진지하게, 라인 64는 무엇입니까? 모니터를 볼 수 없다는 거 알지? –

답변

1

귀하의 globalmap 배열 요소 null이지만 게시하는 내용에 따라 알기가 어렵습니다. 이 라인은 끔찍합니다 :

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

+1

@purpleladydragons : 아하, 다행 이네. 이런 유형의 문제에 대해, 때때로 NPE를 던지는 줄 위에 println 문을 추가하여'System.out.println ("globalmap은 null :"+ (globalmap == null)); System.out.println ("globalmap [x] [y]는 null입니다."+ (globalmap [x] [y] == null));'등 ...이 때문에 println을 "poor 남자의 디버거 "라고합니다. 또한 대부분의 IDE의 디버깅 기능을 사용할 수 있습니다. –

관련 문제