java - 如何解决MVC设计模式中的java.lang.StackOverflowError(加上mySQL)

标签 java mysql model-view-controller

我正在使用MVC设计模式,并且我是设计模式和java的完全初学者。 如果我没有放置 LoginModel login = new LoginModel());会弹出java.lang.nullPointerException。但是当我放它的时候,就会发生这个java.lang.StackOverflowError。 我不确定我是否提供了足够的详细信息,但如果您需要更多详细信息,请提及,我将提供更多详细信息..

public class LoginModel {

    private String userName;
    private int id;
    private String email;
    private long startTime;
    private long endTime;
    Timer timer;

    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;

    Connection conn = null;
    ResultSet rs = null;
    PreparedStatement pst = null;
    LoginModel login = new LoginModel(); //this is where the error happens


    public LoginModel(){}
    public LoginModel(int id,String userName,String email){
        this.id=id;
        this.userName=userName;
        this.email=email;        
    }

    public int getID(){
        return id;
    }
    public String getUserName(){
        return userName;
    }
    public String getEmail(){
        return email;
    }


    public void setStartTime(long time){
        startTime=time;
    }
    public void setEndTime(long time){
        endTime = time;
    }
    public long getUsedTime(){
        return (endTime-startTime);
    }
    public LoginModel(int seconds) {
        timer = new Timer();
        timer.schedule(new LoginModel.RemindTask(), seconds*1000);
    }
    public void setTimer(int seconds){
        timer = new Timer();
        timer.schedule(new LoginModel.RemindTask(), seconds*1000);
    }



    class RemindTask extends TimerTask {
        public void run() {
            JOptionPane.showMessageDialog(null, "60 seconds left!");
            timer.cancel();

        }
    }



    public void RetrieveDbase (Connection conn){
    String sql = "SELECT * FROM customer_info WHERE username = ? and password = ?";
    String sql2 = "SELECT * FROM admin_info WHERE username = ? and password = ?";
    String sql11 = "SELECT * FROM customer_info WHERE username = ? and password = ? and paidRemainingTime != 0";

    try{
        pst = conn.prepareStatement(sql);
        pst.setString(1, jTextField1.getText());
        pst.setString(2, jTextField2.getText());
        rs = pst.executeQuery();

        if (rs.next()){
        JOptionPane.showMessageDialog(null, "Welcome "+jTextField1.getText());
            try{
                 pst = conn.prepareStatement(sql11);
                 pst.setString(1, jTextField1.getText());
                 pst.setString(2, jTextField2.getText());
                 rs = pst.executeQuery(); 
                 if (rs.next()){ 

                    new dummyHomepage().setVisible(true);
                    //this.setVisible(false);

                    JOptionPane.showMessageDialog(null,"Your Paid Time Remains "
                             + rs.getInt("paidRemainingTime")+"Minutes");                     
                    login.setTimer(rs.getInt("paidRemainingTime"));
                    long startTime = System.currentTimeMillis( );
                    login.setStartTime(startTime);

            }

                 else{

                     new PurchaseInterface().setVisible(true);
                     //this.setVisible(false);

            }
            }
            catch (Exception e){
            JOptionPane.showMessageDialog(null, e);
            }

        }
        else

             try{
                    pst = conn.prepareStatement(sql2);
                    pst.setString(1, jTextField1.getText());
                    pst.setString(2, jTextField2.getText());
                    rs = pst.executeQuery();
            if (rs.next()){
            JOptionPane.showMessageDialog(null, "Welcome ADMIN "+jTextField1.getText());
            new ManageUserInterface().setVisible(true);
             //this.setVisible(false);
            }
            else
            JOptionPane.showMessageDialog(null, "Invalid username and password");    
            }
    catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
    }
    }
     catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
    }

    }

    public Connection getDbase(){
        return conn;
    }
}

最佳答案

LoginModel login = new LoginModel();

login 在本例中是一个成员变量,这意味着它将为 LoginModel 类型的每个新对象创建。

由于创建LoginModel对象创建了成员变量login,它是一个LoginModel,它创建了一个成员变量login code> 这是一个 LoginModel...你有问题。

关于java - 如何解决MVC设计模式中的java.lang.StackOverflowError(加上mySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16345329/

相关文章:

java - Java 中的内部类覆盖率

java - 哪种数据格式适合将数据(左连接数据库查询的结果)从 servlet 传输到 JSP?

Spring MVC Thymeleaf Kotlin

java - 带有配置服务器的 Spring Cloud Eureka

java - 如何序列化 lambda?

MySQL LEFT JOIN 查询行为异常

mysql - 对于具有单表继承的多个类的多通连接,正确的 SQL 语句是什么

java - 当 DefaultTableModel 已更改时在 JTable 上设置模型

java - Mavenizing Netbeans 平台应用程序,这可能吗?

mysql - 将记录的查询存储到 mysql 客户端