创建新类对象时出现 Java java.lang.StackOverflowError : possible recursion?

标签 java eclipse

从类创建对象时出现错误。

public class Game extends Form {

private GameWorld gw;

private int lives;
private int clock;

public Game() {

    // initialize game
    init();
    System.out.println("before gameworld: ");

    gw = new GameWorld();

    System.out.println("after gameworld: ");
    gw.init();
    play();
}...

程序迭代,在 Gameworld 之前打印并转到下面的行然后重复。

gw = new GameWorld();

游戏世界类

public class GameWorld extends Game {

private int gameWidth;
private int gameHeight;

public GameWorld(){

    //init();

    System.out.println("after inititalization");
}...

运行时在 Eclipse 中出现以下错误。

java.lang.StackOverflowError
at com.codename1.ui.plaf.DefaultLookAndFeel.getPreferredSize(DefaultLookAndFeel.java:675)
at com.codename1.ui.plaf.DefaultLookAndFeel.getLabelPreferredSize(DefaultLookAndFeel.java:665)
at com.codename1.ui.Label.calcPreferredSize(Label.java:484)
at com.codename1.ui.Component.preferredSizeImpl(Component.java:1985)
at com.codename1.ui.Component.preferredSize(Component.java:2020)
at com.codename1.ui.Component.getPreferredSize(Component.java:782)
at com.codename1.ui.Component.getPreferredW(Component.java:862)
at com.codename1.ui.layouts.BorderLayout.getPreferredSize(BorderLayout.java:440)
at com.codename1.ui.Container.calcPreferredSize(Container.java:1848)
at com.codename1.ui.Component.preferredSizeImpl(Component.java:1985)
at com.codename1.ui.Component.preferredSize(Component.java:2020)
at com.codename1.ui.Component.getPreferredSize(Component.java:782)
at com.codename1.ui.Component.getPreferredH(Component.java:872)
at com.codename1.ui.layouts.BorderLayout.positionTopBottom(BorderLayout.java:414)
at com.codename1.ui.layouts.BorderLayout.layoutContainer(BorderLayout.java:284)
at com.codename1.ui.Container.doLayout(Container.java:1420)
at com.codename1.ui.Container.layoutContainer(Container.java:1412)
at com.codename1.ui.Container.revalidate(Container.java:1058)
at com.codename1.ui.Toolbar$ToolbarSideMenu.initMenuBar(Toolbar.java:1233)
at com.codename1.ui.Form.setMenuBar(Form.java:3229)
at com.codename1.ui.Form.setToolbar(Form.java:3250)
at com.codename1.ui.Form.initGlobalToolbar(Form.java:218)
at com.codename1.ui.Form.<init>(Form.java:210)
at com.codename1.ui.Form.<init>(Form.java:166)
at com.mycompany.racecar.Game.<init>(Game.java:19)
at com.mycompany.racecar.GameWorld.<init>(GameWorld.java:8)
at com.mycompany.racecar.Game.<init>(Game.java:25)
at com.mycompany.racecar.GameWorld.<init>(GameWorld.java:8)
at com.mycompany.racecar.Game.<init>(Game.java:25)
at com.mycompany.racecar.GameWorld.<init>(GameWorld.java:8)
at com.mycompany.racecar.Game.<init>(Game.java:25)
at com.mycompany.racecar.GameWorld.<init>(GameWorld.java:8)
at com.mycompany.racecar.Game.<init>(Game.java:25)
at com.mycompany.racecar.GameWorld.<init>(GameWorld.java:8)
at com.mycompany.racecar.Game.<init>(Game.java:25)
at com.mycompany.racecar.GameWorld.<init>(GameWorld.java:8)
at com.mycompany.racecar.Game.<init>(Game.java:25)
at com.mycompany.racecar.GameWorld.<init>(GameWorld.java:8)
at com.mycompany.racecar.Game.<init>(Game.java:25)

我做错了什么?为什么循环这么多?

最佳答案

由于创建 Game 对象时出现无限循环,您会收到 java.lang.StackOverflowError 异常。这是陷入循环并导致 StackOverflowError 的调用序列:

new Game() => new GameWorld() => new Game() ....

在 Java 中,子类总是隐式调用其父构造函数或显式调用 super()。因此,GameWorld 构造函数将调用 Game 默认构造函数,然后再次调用 GameWorld 构造函数,这样就永远消失了。

关于创建新类对象时出现 Java java.lang.StackOverflowError : possible recursion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42430855/

相关文章:

java - Maven依赖问题

java - 项目在 Minecraft Mod 中不起作用 - Minecraft Forge Mod 开发 [编辑 : FIXED]

eclipse - 如何将 Eclipse 从 3.4 (Ganymede) 更新到 3.5 (Galileo)?

java - 与数据库相关的条形图

java - 如何在 Eclipse 中只编译修改过的 java 文件

java - 遍历链表时出现堆栈溢出错误

java - eclipse 中带黄色星星的绿点是什么意思?

Eclipse:在 GWT 项目的版本控制中存储哪些文件

java - 使用 Eclipse 部署和测试 rest-webservice

java - 处理 Scala 中 Java API 调用的 null 和异常