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
Post a Comment