如何避免这种NullPointerException

我正在开发一款小型街机video游戏,我期待双重缓冲来改善动画效果。 我有一个类应该绘制空白图像,另一个类应该绘制一个简单的线。 但是,我一直在应该绘制线的行上得到NullPointerException

class Render extends JPanel { public int dbWidth = 500, dbHeight = 400; public Image dbImage = null; public Graphics dbg; public void gameRender() { if( dbImage == null ) dbImage = createImage( dbWidth, dbHeight ); dbg = dbImage.getGraphics(); dbg.setColor( Color.white ); dbg.fillRect( 0, 0, dbWidth, dbHeight ); } } class MC extends Render { public Render render = new Render(); public void draw() { render.gameRender(); dbg.drawLine( 100, 100, 200, 200 ); // line where NullPointerException occurs } } 

我想这是图形变量dbg,它是null,但是它得到dbImage.getGraphics();的值dbImage.getGraphics();gameRender(); 我怎么能修复这个NullPointerException?

我也在另一个类中调用draw()方法

  public void run() { running = true; while( running ) { mc.draw(); try { Thread.sleep( 50 ); } catch( Exception e ) {} } } 

我在那个类的构造函数中说过mc = new MC();

你在this实例上调用dbg ,而不是render的实例。

您需要将其更改为

 render.dbg.drawLine(....) 

或者,如果你想让dbg调用保持不变,你可以调用

 this.gameRender(); 

先打电话再打电话

 dbg.drawLine(...); 

您可以通过在render调用gameRender来设置dbg ,但不是this

由于MC扩展了render,因此您引用的dbg属于名为draw的MC实例。 你可以通过电话来解决它

 render.dbg.drawLine( 100, 100, 200, 200 ); 

或利用您实现的inheritance

 class MC extends Render { //MC is a render, so you don't need to create another one public void draw() { gameRender(); //Call the MC's own gameRender dbg.drawLine( 100, 100, 200, 200 ); //Calling gameRender initialized dbg so you won't get a NullPointerException } } 
Interesting Posts