Java - 创建多个对象后如何避免 StackOverflow?
Java - How do you avoid a StackOverflow after creating multiple objects?
我目前正在为大学做我的考试项目。任务是创建棋盘游戏 ludo。在编写了一些代码并进行了一些测试之后,我 运行 进入了 WhosebugError。
所以这是结构(5 类 是必不可少的):
Main.class GUI.class Game.class Player.class Piece.class
Main 创建一个名为 mainGUI 的 GUI 类型的新对象。这将创建游戏的视觉效果,包括带有开始按钮的小设置区域。
按下“开始”按钮后,将创建一个游戏类型的新对象,然后创建 4 个玩家类型的新对象(显然是 4 个玩家)。
当创建类型为 Player 的对象时,此类型获取参数 'nmbr',它仅说明玩家的编号(Player1、Player2 等)。
每个玩家有 4 个棋子可以在棋盘上移动,因此这 4 个玩家中的每个人都创建了另外 4 个棋子类型的对象。
现在当按下开始按钮时,棋子会显示在棋盘上。但那不会发生。相反,我收到一条错误消息,指出在调用第一个 Player 对象时出现 WhosebugError。
所以我试图在 java 和 Whosebug 中阅读对象创建的行为以及类似的东西。但我在这里能得到的唯一结论是,我在彼此内部创建了太多对象。
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'
此按钮应该通过创建游戏类型的对象来启动游戏。
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.WhosebugError
at spielPackage.Player.<init>(Player.java:18)
at spielPackage.Game.<init>(Game.java:9)
抱歉,如果代码有点不干净。我是 java 的新手,这项工作仍在进行中。
此时我不知道为什么 Java 会抛出 WhosebugError
您的 Player
应该 而不是 extend Game
,因为 Player
不是 Game
。
现在你创建了一个游戏,它创建了四个玩家,每个玩家都是不同的"Game",然后再创建四个玩家,这些玩家是游戏,每个玩家创建四个新玩家......
我目前正在为大学做我的考试项目。任务是创建棋盘游戏 ludo。在编写了一些代码并进行了一些测试之后,我 运行 进入了 WhosebugError。
所以这是结构(5 类 是必不可少的): Main.class GUI.class Game.class Player.class Piece.class
Main 创建一个名为 mainGUI 的 GUI 类型的新对象。这将创建游戏的视觉效果,包括带有开始按钮的小设置区域。
按下“开始”按钮后,将创建一个游戏类型的新对象,然后创建 4 个玩家类型的新对象(显然是 4 个玩家)。
当创建类型为 Player 的对象时,此类型获取参数 'nmbr',它仅说明玩家的编号(Player1、Player2 等)。
每个玩家有 4 个棋子可以在棋盘上移动,因此这 4 个玩家中的每个人都创建了另外 4 个棋子类型的对象。
现在当按下开始按钮时,棋子会显示在棋盘上。但那不会发生。相反,我收到一条错误消息,指出在调用第一个 Player 对象时出现 WhosebugError。
所以我试图在 java 和 Whosebug 中阅读对象创建的行为以及类似的东西。但我在这里能得到的唯一结论是,我在彼此内部创建了太多对象。
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' 此按钮应该通过创建游戏类型的对象来启动游戏。
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.WhosebugError
at spielPackage.Player.<init>(Player.java:18)
at spielPackage.Game.<init>(Game.java:9)
抱歉,如果代码有点不干净。我是 java 的新手,这项工作仍在进行中。
此时我不知道为什么 Java 会抛出 WhosebugError
您的 Player
应该 而不是 extend Game
,因为 Player
不是 Game
。
现在你创建了一个游戏,它创建了四个玩家,每个玩家都是不同的"Game",然后再创建四个玩家,这些玩家是游戏,每个玩家创建四个新玩家......