两个类之间的java.lang.StackOverflower错误
我试图在一个类中创建一个JFrame,并在我的主类中向它添加一个JPanel,这是不可能的吗 这是我的主课两个类之间的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();
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类中。他们并不真正属于主要阶级