两个类之间的java.lang.StackOverflower错误

两个类之间的java.lang.StackOverflower错误,java,swing,inheritance,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();

我试图在一个类中创建一个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);
    }

}
还有窗户课


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.StackOverflowerError中得到异常,您的窗口类扩展了main。调用子类的构造函数时,首先调用父类的构造函数


在本例中,您正在主构造函数中调用窗口构造函数。由于继承,窗口构造函数调用主构造函数,导致堆栈溢出:每个构造函数调用另一个构造函数

为什么您的
窗口
类扩展
Main
?是什么使它与
Main
“相同”?每个
Window
都是
Main
,而
Main
构造函数创建了另一个新的
Window
——那就是无限递归。如果我不在
Window
类中扩展
Main
,我就不能做
框架。添加(p)
。还有别的方法吗?
还有别的方法吗是,请阅读上的Swing教程以获取基本示例。本教程包含所有Swing基础知识。下载“FrameDemo”代码并进行更改。好的,但是如果我不能在
窗口中扩展
Main
,我如何使用
frame.add(p)
p
是在
Main
类中创建的JPanel。如果我没有错,您可以在Window的内部类中更改Window类。但是最好的方法是将您的JPanel和JLabel放在window类中。他们并不真正属于主要阶级