我不确定如何使用图形绘制方法抛出一大堆扩展类并实现类,一些是抽象的,另一些是接口。至少它不会抛出任何编译器错误。但是我遇到了堆栈溢出运行时异常。
首先,我必须从这个界面开始。
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);
}
});
}
}
我应该注意到,我遗漏了许多其他方法和类。原因是,他们与绘制砖块没有任何关系。
答案 0 :(得分:0)
你在这里有无限递归
public void draw(Graphics g) {
draw(g); // This line throws the Error.
}
行draw(g)
正在调用自己。并且当被调用时,它再次调用自己等,所以一段时间后它会溢出。
可能你想要g.draw();
这样的东西?或者也许super.draw(g);