如何避免这种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 } }