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

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

public interface Drawable{

    public abstract void draw(Graphics g);

}


然后由该抽象类实现。尽管它没有实现任何绘制代码。

public abstract class GameObject implements Drawable {}


下一个类将对其进行扩展。这是我在draw(g);处出现堆栈溢出错误的地方。
在那行代码中,net bean 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);
            }
        });
    }
}


我可能应该注意,我遗漏了很多其他方法和类。原因是,他们与砌砖没有任何关系。

最佳答案

您在这里有无限递归

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


draw(g)行正在调用自身。当被调用时,它会再次调用自身,依此类推,所以一段时间后它会溢出。

也许您想要的是类似g.draw();的东西?也许super.draw(g);

关于java - 我试图绕一圈画一堵砖墙。对于突破游戏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34151254/

10-15 22:18