我使用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)
你是否檢查過'model!= null'? – aioobe
儘管我同意人們建議'model'爲'null',但是您發佈了'sendLogin'方法的內容兩次,而其中一個應該是'verifyUser' – besamelsosu
這是LoginController.java第64行嗎?堆棧跟蹤表明在這一行是錯誤...它可能是'model'對象或'verifyUser'function – Charliemops