swing - Issue with actionListener/actionhandler java NullPointerException -


my issue when trying excute code, keep getting nullpointerexception on actionlistener. here login view. exception occurs in loginview class after testing.

public class loginview extends jdialog {  private static final long serialversionuid = 1l; private jtextfield tfusername; private jpasswordfield pfpassword; private jlabel lbusername; private jlabel lbpassword; private jbutton btnlogin; private jbutton btncancel; private boolean succeeded;  /*public loginview(frame parent) {      super(parent, "login", true);     setlocationrelativeto(parent); }*/  public void createui(){      jpanel panel = new jpanel(new gridbaglayout());     gridbagconstraints cs = new gridbagconstraints();      cs.fill = gridbagconstraints.horizontal;      lbusername = new jlabel("username: ");     cs.gridx = 0;     cs.gridy = 0;     cs.gridwidth = 1;     panel.add(lbusername, cs);      tfusername = new jtextfield(20);     cs.gridx = 1;     cs.gridy = 0;     cs.gridwidth = 2;     panel.add(tfusername, cs);      lbpassword = new jlabel("password: ");     cs.gridx = 0;     cs.gridy = 1;     cs.gridwidth = 1;     panel.add(lbpassword, cs);      pfpassword = new jpasswordfield(20);     cs.gridx = 1;     cs.gridy = 1;     cs.gridwidth = 2;     panel.add(pfpassword, cs);     panel.setborder(new lineborder(color.gray));      btnlogin = new jbutton("login");     btnlogin.addactionlistener(new actionlistener(){           public void actionperformed(actionevent e) {             system.out.println("login in button pushed ");          }      });      btncancel = new jbutton("cancel");     /*btncancel.addactionlistener(new actionlistener() {          public void actionperformed(actionevent e) {             dispose();         }     });*/     jpanel bp = new jpanel();     bp.add(btnlogin);     bp.add(btncancel);      getcontentpane().add(panel, borderlayout.center);     getcontentpane().add(bp, borderlayout.page_end);        pack();     setresizable(false);   }  //action listener handle in logincontroller public void addloginlistener(actionlistener listenforloginbutton){      btnlogin.addactionlistener(listenforloginbutton); //error occurs here  }  public void addcancellistener(actionlistener listenforcancelbutton){      btnlogin.addactionlistener(listenforcancelbutton);// , here  }  //return user-name public string getusername() {     return tfusername.gettext().trim(); }  //return password public string getpassword() {     return new string(pfpassword.getpassword()); }  public boolean issucceeded() {     return succeeded; } } 

here tha controller , inner class action handler

/*the logincontroller class handles logic behind login validation , and   * error handling connected login*/ public class logincontroller{ @suppresswarnings("unused") private databaseconnection databaseconnection; //not using yet private loginview loginview;   /*the constructor 2 parameters databaseconnection , loginview  * true mvc frameworke*/  public logincontroller(databaseconnection databaseconnection, loginview loginview){      this.databaseconnection = databaseconnection;     this.loginview = loginview;        this.loginview.addloginlistener(new loginhandler());     this.loginview.addcancellistener(new loginhandler()); }  public boolean authenticate(string username, string password) {     /* hard-coded user-name , password, because know       * user-name , password is*/      if (username.equals("bob") && password.equals("secret")) {          return true;      }      return false; }    /***********************/ /*****inner class*******/ /***********************/  class loginhandler implements actionlistener{      //an empty constructor     public loginhandler(){      }      public void actionperformed(actionevent e) {          //this switch handle 2 events, login pushed or cancel pushed         switch(e.getactioncommand()){          case "btnlogin":              system.out.println("login in button pushed ");              break;          case "btncancel":              system.out.println("cancel in button pushed ");              break;           }     } }  /***********************/ /****end inner class****/ /***********************/  }//end class 

and error

exception in thread "main" java.lang.nullpointerexception @ se.bbs.nackademin.views.loginview.addloginlistener(loginview.java:94) @ se.bbs.nackademin.controllers.logincontroller.<init>(logincontroller.java:30) @ se.bbs.nackademin.main.demo.main(demo.java:23) 

the stack trace says exception happens @ line of logincontroller constructor:

this.loginview.addloginlistener(new loginhandler()); 

what possibly null @ line? there 1 possibility: this.loginview.

this field has been initialized before value of loginview argument of constructor.

this.loginview = loginview; 

so means caller of constructor passes null instead of passing loginview instance.

who caller of constructor? stack trace tells us: se.bbs.nackademin.main.demo.main(demo.java:23)

so, bug there. main method of class demo passes null constructor of logincontroller. faulty code @ line 23 in demo.java.


Comments