StackOverflowError的原因是什么?

时间:2016-05-05 19:11:54

标签: java stack-overflow

我一直在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);

    }
}

错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

因此,您可以使用 Sales_Center 类的构造函数执行以下操作:

login.addActionListener(new loginb());

我发现 loginb 来自 Sales_Center 。这意味着 loginb 的构造函数调用超类的构造函数。由于您没有声明任何构造函数,因此结果代码如下所示:

class loginb extends Sales_Center {
    public loginb() {
        super();
    }
}

那发生了什么?答案很简单。您的父类创建了他的子类的实例,并且您有无限递归。 您尝试创建父类的实例,该实例创建了创建其父级的子类。它一次又一次地发生。