【问题标题】:Java NullPointerException when there are no variables not initialiased没有未初始化的变量时出现 Java NullPointerException
【发布时间】:2011-08-18 07:44:43
【问题描述】:

我正在使用 java swing 创建这个登录表单,我基本上做的是从相关的 JtextFields 中获取值并将它们发送到另一个类。此后我用数据库记录检查它。但是,每次我运行该程序时,它总是显示 NullPointerException。我测试了每个变量,发现它们都没有包含任何 Null 值。

这是从 JTextField 获取值的第一个方法(在 LoginPage 类中)

public void actionPerformed(ActionEvent e) {
String user=textField.getText();
String pass=String.valueOf(passwordField.getPassword());

//try{
//if((user!=null)&&(pass!=null)){
//  System.out.println("user is not null");

ui.sendLogin(user,pass);

//}else{}
//}catch(NullPointerException ex){
    //System.out.println("Entered catch block og view"+ex.getMessage());
//}

}

然后它调用这个方法(在类 LoginController 中)

public void sendLogin(String user, String pass) {
try{
    System.out.println("values from sendLogin"+user+"pass"+pass);
    model.verifyUser(user,pass);
}catch(NullPointerException ex){
    System.out.println("Entered catch block os sendLogin"+ex);
    ex.printStackTrace();
}
}

最后,verifyUser 方法(在 LoginModel 类中)用数据库检查它

 public void verifyUser(String user,String pass){           
        String username="";
        String password="";
        String acc="";
         try{
             String sql="SELECT * FROM users";
             con1.getInstance();
             Statement st = con1.getConn().createStatement();
             ResultSet rs=st.executeQuery(sql);
             rs.next();     
             username=rs.getString("username");
             password=rs.getString("password");
             acc=rs.getString("accountType");
             if(username.equals(user)&&password.equals(pass)){
                 System.out.println("Logged into the system");
                 global_username=username;
                 accountType=acc;
             }else{
                 System.out.println("Unsuccessful login"+username+user+password+pass);
             }
            st.execute(sql);  
        } catch (SQLException s){
            System.out.println("SQL statement is not executed!"+s);
        }

}

这是堆栈跟踪

java.lang.NullPointerException
    at org.application.view.LoginController.sendLogin(LoginController.java:64)
    at org.application.view.LoginPage$2.actionPerformed(LoginPage.java:94)
user is not null
values from sendLoginapassabc
Entered catch block os sendLoginjava.lang.NullPointerException
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

【问题讨论】:

  • 你检查过model != null吗?
  • 虽然我同意有人建议modelnull,但是您两次发布了sendLogin 方法的内容,其中一个应该是verifyUser
  • 第 64 行 LoginController.java 是什么?堆栈跟踪表明这一行是错误...它可能是model 对象或verifyUserfunction
  • @mustafabattal 是的,我错误地两次发布了相同的方法。对不起,我现在更正了。 Charliemops的LoginController line 64是model.verifyUser(user,pass)

标签: java compiler-errors nullpointerexception initialization


【解决方案1】:

衡量,不要猜测。

为什么要猜测哪个变量为空?堆栈跟踪为您提供发生异常的行号。启动调试器并在LoginController 类的第 64 行设置断点。

【讨论】:

    【解决方案2】:

    我猜model 变量为空并导致NullPointerException

    【讨论】:

      【解决方案3】:

      我相信您的 model 变量为空。 这就是导致您的NullPointerException 的原因。

      这是第64行model.verifyUser(user,pass);

      【讨论】:

      • 那么这就是错误。您需要检查为什么模型为空并修复它
      【解决方案4】:

      我打赌model 变量是null

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 2016-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多