繁体   English   中英

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

[英]Java - How do you avoid a StackOverflow after creating multiple objects?

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

因此,这里是结构(必须有5个类):Main.class GUI.class Game.class Player.class Piece.class

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

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

创建播放器类型的对象时,此类型将获取参数“ 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'。该按钮应该通过创建Game类型的对象来启动游戏。

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

现在,您创建一个游戏,该游戏创建四个游戏者,每个游戏者是一个不同的“游戏”,再创建四个游戏游戏者,每个游戏者创建四个新玩家……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM