试图画到画布时得到一个nullpointerexception错误
我试图通过使用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); }
可能是你的全局映射数组元素是空的,但很难根据你发布的内容来判断。请注意,此行是可怕的:
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);
}
发现将值分配给永不执行的全局映射的函数。非常感谢你指出这一点,除了帮助我的坏习惯外。 – purpleladydragons 2011-12-18 16:08:59
@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
......哪条线是线64? – 2011-12-18 15:33:47
你确定globalmap不是null吗? – 2011-12-18 15:37:07
说真的,第64行是什么?你知道我们看不到你的显示器,对吧? – 2011-12-18 15:51:07