两个类之间的java.lang.StackOverflowError

时间:2019-04-03 14:29:26

标签: java swing inheritance

我试图在一个类中创建一个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中得到异常

1 个答案:

答案 0 :(得分:3)

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

在您的情况下,您要在Main构造函数中调用Window构造函数。由于继承,Window构造函数调用Main构造函数,从而导致StackOverflow:每个构造函数都调用另一个