首页 > 解决方案 > 两个类之间的 java.lang.StackOverflowError

问题描述

我正在尝试在一个类中创建一个 JFrame 并在我的主类中添加一个 JPanel,这不可能吗?

这是我的主要课程

public class Main {

    JPanel p;
    JLabel lbl1;

    public static void main(String[] args) {
        new Main();
    }

    Main() {

        new Window();

        JPanel p = new JPanel();
        JLabel lbl1 = new JLabel("Hello");
        p.add(lbl1);
    }

}

和 Window 类


public class Window extends Main {
    Window() {
        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.add(p);
    }

}

我在线程“main”java.lang.StackOverflowError 中得到异常

标签: javaswinginheritance

解决方案


您的 Window 类扩展了 Main。调用子类的构造函数时,先调用父类的构造函数。

在您的情况下,您在 Main 构造函数中调用 Window 构造函数。Window 构造函数调用 Main 构造函数,因为继承,导致 StackOverflow :每个构造函数调用另一个


推荐阅读