1

我使用java swing創建了這個登錄窗體,我基本上做的是從相關的JtextFields獲取值並將它們發送到另一個類。之後我用數據庫記錄檢查它。但是,每次運行程序時,程序總是顯示一個NullPointerException。我測試了每個變量,並且看到它們都沒有包含任何空值。Java NullPointerException當沒有未初始化的變量時

這是第一個方法(在LoginPage類),其從所述的JTextField

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) 
+2

你是否檢查過'model!= null'? – aioobe

+1

儘管我同意人們建議'model'爲'null',但是您發佈了'sendLogin'方法的內容兩次,而其中一個應該是'verifyUser' – besamelsosu

+0

這是LoginController.java第64行嗎?堆棧跟蹤表明在這一行是錯誤...它可能是'model'對象或'verifyUser'function – Charliemops

回答

2

我猜的model變量爲空,造成了NullPointerException

1

我相信你的model變量爲null。 這是什麼導致你的NullPointerException

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

+0

是的,那就是你所指的行 – Yoosuf

+0

那麼那就是錯誤。你需要檢查爲什麼model是null並且修復它 –

1

我敢打賭,model變量是null

5

措施,不要猜測。

爲什麼猜猜哪個變量爲空?堆棧跟蹤爲您提供發生異常的行號。啓動調試器並在LoginController類的第64行上設置一個斷點。