我试图在一个圆形的方式画一堵砖墙。对于突围游戏

时间:2015-12-08 08:35:01

标签: java

我不确定如何使用图形绘制方法抛出一大堆扩展类并实现类,一些是抽象的,另一些是接口。至少它不会抛出任何编译器错误。但是我遇到了堆栈溢出运行时异常。

首先,我必须从这个界面开始。

public interface Drawable{

    public abstract void draw(Graphics g);

}

然后它由这个抽象类实现。虽然它没有实现任何绘图代码。

public abstract class GameObject implements Drawable {}

它会被下一个课程扩展。这是我在draw(g)处得到Stack Overflow Error的地方。 同样在那一行,net beans IDE给了我一个提示:"如果没有在子类中重写,方法绘制可能会递归。"

public class Brick extends GameObject {
    private int height;
    private int width;
    Brick(int xPosition, int yPosition, int width, int height, Color color) {
        super(xPosition, yPosition, color);
        this.width = width;
        this.height = height;
    } 
     public void draw(Graphics g) {
        draw(g); // This line throws the Error.
        g.setColor(color);
        g.fillRect(xPosition, yPosition, width, height);
    }
}

接下来的一点可能都错了。我写了一个自动化Wall构建的方法。然后我在paint方法中调用该方法。我应该能够混淆它,最终,也许,可能不是。我不认为它与错误有任何关系,但我把它包括在内以防万一。

public class Game extends JPanel { 
int nBricks = 100;
Graphics g;    
public void Wall(int nBricks) {
        int yPosition = 0;
        for (int xPosition = 0; xPosition < nBricks * 10; xPosition += 10) {
            if (xPosition % 100 == 0) {
                yPosition += 5;
            }
            Brick brick = new Brick(xPosition, yPosition, 10, 5, Color.GRAY);
            brick.draw(g);
        }
    }
    public void paint(Graphics g){
        this.Wall(nBricks);

    }
}

最后,主要方法是在这个类中。

public class GameFrame extends JFrame{
    private Game game;

    public GameFrame(){  
        game.setDoubleBuffered(true);            
        this.getContentPane().add(game); 
        this.pack();
        game.start();  
    }
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run()  {
                new GameFrame().setVisible(true);
            }
        });
    }
}    

我应该注意到,我遗漏了许多其他方法和类。原因是,他们与绘制砖块没有任何关系。

1 个答案:

答案 0 :(得分:0)

你在这里有无限递归

 public void draw(Graphics g) {
    draw(g); // This line throws the Error.
 }

draw(g)正在调用自己。并且当被调用时,它再次调用自己等,所以一段时间后它会溢出。

可能你想要g.draw();这样的东西?或者也许super.draw(g);