我一直在StackOverflowError
,我无法弄明白为什么。
这是确切的错误消息
java.lang.StackOverFlowError:null(在sun.awt.Win32GraphicsConfig中)
这是我的代码:
import java.lang.*;
import javax.swing.*;
import java.awt.*;
import java.awt.Component.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Sales_Center {
JFrame mainf, loginf, newuserf;
JButton submit, login, newuser;
JPanel mainp, loginp, newuserp;
JLabel userlbl, passlbl;
JTextField usertxt, passtxt;
public static void main(String[] args) {
rungui();
}
public Sales_Center() {
loginf = new JFrame("Login");
loginf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loginf.setSize(new Dimension(275, 150));
loginp = new JPanel();
loginp.setLayout(new GridLayout(0, 2, 10, 5));
loginp.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
loginp.setPreferredSize(new Dimension(250, 400));
userlbl = new JLabel("Username: ");
loginp.add(userlbl);
usertxt = new JTextField(5);
loginp.add(usertxt);
passlbl = new JLabel("Password: ");
loginp.add(passlbl);
passtxt = new JTextField(5);
loginp.add(passtxt);
login = new JButton("Login");
login.addActionListener(new loginb());
loginp.add(login);
newuser = new JButton("Creat Profile");
newuser.addActionListener(new newuserb());
loginp.add(newuser);
//loginf.pack();
loginf.setVisible(true);
loginf.setContentPane(loginp);
}
public static void rungui() {
JFrame.setDefaultLookAndFeelDecorated(false);
Sales_Center gui = new Sales_Center();
}
}
class loginb extends Sales_Center implements ActionListener {
String user, pass;
public void actionPerformed(ActionEvent ae) {
pass = passtxt.getText();
user = usertxt.getText();
Login login = new Login(pass, user);
}
}
class newuserb extends Sales_Center implements ActionListener {
String user, pass;
public void actionPerformed(ActionEvent ae) {
pass = passtxt.getText();
user = usertxt.getText();
NewProfile newprofile = new NewProfile(user, pass);
}
}
错误的原因是什么?
答案 0 :(得分:3)
因此,您可以使用 Sales_Center 类的构造函数执行以下操作:
login.addActionListener(new loginb());
我发现 loginb 来自 Sales_Center 。这意味着 loginb 的构造函数调用超类的构造函数。由于您没有声明任何构造函数,因此结果代码如下所示:
class loginb extends Sales_Center {
public loginb() {
super();
}
}
那发生了什么?答案很简单。您的父类创建了他的子类的实例,并且您有无限递归。 您尝试创建父类的实例,该实例创建了创建其父级的子类。它一次又一次地发生。