В настоящее время я работаю над своим экзаменационным проектом для универа. Задача состоит в том, чтобы создать настольную игру Людо. Написав немного кода и проведя некоторое тестирование, я столкнулся с StackOverflowError.
Итак, вот структура (необходимо 5 классов): Main.class GUI.class Game.class Player.class Piece.class
Main создает новый объект типа GUI с именем mainGUI. Это создает визуальные эффекты для игры, включая небольшую область настроек с кнопкой запуска.
При нажатии кнопки «Старт» создается новый объект типа «Игра», который затем создает 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();
}
Внутри графического интерфейса есть кнопка JButton «отправить». Эта кнопка предназначена для запуска игры путем создания объекта типа 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