Java - 双缓冲NullPointerException

时间:2012-02-06 17:09:01

标签: java swing jframe graphics2d

我正在写一个简单的游戏。我有3个类,第一个:球,它负责照顾每一件事,第二个游戏由一系列“球”制成,最后一个是windows,一个包含MAIN线程。 / p>

window.paint调用game.draw以接收游戏场景的图形。虽然游戏本身双重缓冲它,以便Image对象可以移动到玩家的球位置(尚未实现)。 / p>

所以我的问题是因为我正在创建一个Image对象但是为什么这个被初始化为null,因此我得到了NullPointerException。

以下是处理绘画的方法的来源:

public class MyWindow extends JFrame {
        //...the other code
        public void paint(Graphics g){
            thegame.draw();
            repaint();
        }
}

public class Game extends JFrame implements Runnable {
    ball[] cellmap;

    //...the other code

    public void draw(){
        Image GameImage = createImage(800,800);
        Graphics GameGraphics = GameImage.getGraphics();

        for(int i = 0;i<cellmap.length;i++)
            cellmap[i].draw(GameGraphics);

        g.drawImage(GameImage, 0, 0, this); 
    }
}

public class Ball extends JFrame {
        //...the other code
    public void draw(Graphics g){
        g.setColor(Color.red);
        g.fillOval((int)(this.x+this.radious),(int)(this.y+this.radious),
                       (int)this.radious,(int)this.radious);        
    }
}

1 个答案:

答案 0 :(得分:3)

1)请阅读Java Naming Conventions

2)不好直接在JFrame上画画,把你的画作放到JComponentJLabelJPanel

3)Painting使用方法paintComponent中的Swing,请不要使用方法paint(Graphics g)draw(Graphics g)

4)如果你想延迟或动画你使用javax.swing.Timer