Java - 创建多个对象后如何避免 StackOverflow?

标签 java exception stack-overflow awt-eventqueue

我目前正在为大学做我的考试项目。任务是创建棋盘游戏 ludo。在编写了一些代码并进行了一些测试之后,我遇到了 StackOverflowError。

所以这是结构(5 个类是必不可少的): Main.class GUI.class Game.class Player.class Piece.class

Main 创建一个名为 mainGUI 的 GUI 类型的新对象。这会创建游戏的视觉效果,包括带有开始按钮的小设置区域。

按下“开始”按钮后,将创建一个游戏类型的新对象,然后创建 4 个玩家类型的新对象(显然是 4 个玩家)。

当创建类型为 Player 的对象时,此类型获取参数“nmbr”,该参数仅说明玩家的编号(Player1、Player2 等)。

每个玩家有 4 个棋子可以在棋盘上移动,因此这 4 个玩家中的每个人都创建了另外 4 个棋子类型的对象。

现在,当按下“开始”按钮时,棋子会显示在棋盘上。但那不会发生。相反,我收到一条错误消息,指出在调用第一个 Player 对象时出现 StackOverflowError。

所以我尝试阅读 java 和 StackOverflow 中对象创建的行为以及类似的东西。但我在这里能得到的唯一结论是,我在彼此内部创建了太多对象。

public class Main {
    public static void main(String[] args){
        Main start = new Main();
        start.activate();
    }

    static GUI mainGui;

    public Main() {
       mainGui = new GUI();

    }

在 GUI 中有 JButton“提交” 此按钮应该通过创建游戏类型的对象来启动游戏。

submit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object btn = e.getSource();
                boolean ACTIVE = ((JButton) btn).isEnabled();
                if (ACTIVE) {
                    submit.setVisible(false);
                    cancel.setVisible(true);
                    Game spiel = new Game();
                    spiel.begin();
                }
            }
        });
public class Game {

    public Game() {

    }

    Player player1 = new Player(1);   //this is where the Error occurs
    Player player2 = new Player(2);
    Player player3 = new Player(3);
    Player player4 = new Player(4);
}
etc.
public class Player extends Game {

    private String name;
    private Color color;
    private boolean artiPlayer;
    private int playerNmbr, start, end;
    private int[] startArea, endArea;
    Piece piece1, piece2, piece3, piece4;

    public Player(int nmbr){
        if (nmbr == 1) {    
            System.out.println("1.1");
            piece1 = new Piece(500,175, Color.BLUE, Main.mainGui);
            piece2 = new Piece(550, 175, Color.BLUE, Main.mainGui);
            piece3 = new Piece(500,125, Color.BLUE, Main.mainGui);
            piece4 = new Piece(550, 125, Color.BLUE, Main.mainGui);
            start = 0;
            end = 64;
     }
}

Type Piece => Piece(xPos, yPos, Color, GUI)
//and so on

这是确切的错误信息:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at spielPackage.Player.<init>(Player.java:18)
    at spielPackage.Game.<init>(Game.java:9)

抱歉,如果代码有点不干净。我是 java 的新手,这项工作仍在进行中。

此时我不明白为什么 Java 会抛出 StackOverflowError

最佳答案

您的Player 应该 extend Game 因为Player 不是Game

现在你创建了一个游戏,它创建了四个玩家,每个玩家都是一个不同的“游戏”,然后又创建了四个玩家,这些玩家是游戏,每个玩家创建了四个新玩家……

关于Java - 创建多个对象后如何避免 StackOverflow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357258/

相关文章:

java - 如何在 Java 中创建自定义异常类型?

java - java.lang.StackOverflowError 的根本原因

java - libgdx getHeight() 不覆盖整个屏幕

java - 如何设置maven项目?

javascript - 当您无法控制时如何规避同源策略错误

C# VS2012 stacktrace 行是错误的

java - http ://anonsvn. jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd 返回 301

java - 将工作流添加到自定义 portlet(由 Plugins-SDK 创建)

java - Java 方法操作数栈

c - 在 GTK+ 3 C 中创建菜单时不显示菜单