Saturday, 15 May 2010

nullpointerexception - Null pointer exception in lambda expression -



nullpointerexception - Null pointer exception in lambda expression -

i have javafx application in there listview named roomlist. utilize next line of code check if listview selected :

roomlist.getselectionmodel().selecteditemproperty().addlistener((observable, oldvalue, newvalue) -> showroomelements(newvalue));

and if item selected according selected alter text on labels. works fine. problem comes when, using other menu, alter items in roomlist.it still works on changing labels have null pointer exception.

exception in thread "javafx application thread" java.lang.nullpointerexception @ homeautomation.view.homepagecontroller.showroomelements(homepagecontroller.java:207) @ homeautomation.view.homepagecontroller.lambda$sethomeautomation$1(homepagecontroller.java:59) @ homeautomation.view.homepagecontroller$$lambda$276/1011775954.changed(unknown source) @ com.sun.javafx.binding.expressionhelper$singlechange.firevaluechangedevent(expressionhelper.java:182) @ com.sun.javafx.binding.expressionhelper.firevaluechangedevent(expressionhelper.java:81) @ javafx.beans.property.readonlyobjectwrapper$readonlypropertyimpl.firevaluechangedevent(readonlyobjectwrapper.java:176) @ javafx.beans.property.readonlyobjectwrapper.firevaluechangedevent(readonlyobjectwrapper.java:142) @ javafx.beans.property.objectpropertybase.markinvalid(objectpropertybase.java:112) @ javafx.beans.property.objectpropertybase.set(objectpropertybase.java:145) @ javafx.scene.control.selectionmodel.setselecteditem(selectionmodel.java:102) @ javafx.scene.control.multipleselectionmodelbase.lambda$new$34(multipleselectionmodelbase.java:67) @ javafx.scene.control.multipleselectionmodelbase$$lambda$192/1369453379.invalidated(unknown source) @ com.sun.javafx.binding.expressionhelper$singleinvalidation.firevaluechangedevent(expressionhelper.java:137) @ com.sun.javafx.binding.expressionhelper.firevaluechangedevent(expressionhelper.java:81) @ javafx.beans.property.readonlyintegerwrapper$readonlypropertyimpl.firevaluechangedevent(readonlyintegerwrapper.java:176) @ javafx.beans.property.readonlyintegerwrapper.firevaluechangedevent(readonlyintegerwrapper.java:142) @ javafx.beans.property.integerpropertybase.markinvalid(integerpropertybase.java:113) @ javafx.beans.property.integerpropertybase.set(integerpropertybase.java:146) @ javafx.scene.control.selectionmodel.setselectedindex(selectionmodel.java:68) @ javafx.scene.control.listview$listviewbitsetselectionmodel.updateitemsobserver(listview.java:1287) @ javafx.scene.control.listview$listviewbitsetselectionmodel.access$000(listview.java:1186) @ javafx.scene.control.listview$1.invalidated(listview.java:426) @ javafx.beans.property.objectpropertybase.markinvalid(objectpropertybase.java:111) @ javafx.beans.property.objectpropertybase.set(objectpropertybase.java:145) @ javafx.scene.control.listview.setitems(listview.java:394) @ homeautomation.view.homepagecontroller.handleselectfirstfloor(homepagecontroller.java:141) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ sun.reflect.misc.trampoline.invoke(methodutil.java:71) @ sun.reflect.generatedmethodaccessor1.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ sun.reflect.misc.methodutil.invoke(methodutil.java:275) @ javafx.fxml.fxmlloader$methodhandler.invoke(fxmlloader.java:1759) @ javafx.fxml.fxmlloader$controllermethodeventhandler.handle(fxmlloader.java:1645) @ com.sun.javafx.event.compositeeventhandler.dispatchbubblingevent(compositeeventhandler.java:86) @ com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:238) @ com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:191) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:58) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.eventutil.fireeventimpl(eventutil.java:74) @ com.sun.javafx.event.eventutil.fireevent(eventutil.java:49) @ javafx.event.event.fireevent(event.java:198) @ javafx.scene.control.menuitem.fire(menuitem.java:462) @ com.sun.javafx.scene.control.skin.contextmenucontent$menuitemcontainer.doselect(contextmenucontent.java:1364) @ com.sun.javafx.scene.control.skin.contextmenucontent$menuitemcontainer.lambda$createchildren$324(contextmenucontent.java:1317) @ com.sun.javafx.scene.control.skin.contextmenucontent$menuitemcontainer$$lambda$295/2103054710.handle(unknown source) @ com.sun.javafx.event.compositeeventhandler$normaleventhandlerrecord.handlebubblingevent(compositeeventhandler.java:218) @ com.sun.javafx.event.compositeeventhandler.dispatchbubblingevent(compositeeventhandler.java:80) @ com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:238) @ com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:191) @ com.sun.javafx.event.compositeeventdispatcher.dispatchbubblingevent(compositeeventdispatcher.java:59) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:58) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.eventutil.fireeventimpl(eventutil.java:74) @ com.sun.javafx.event.eventutil.fireevent(eventutil.java:54) @ javafx.event.event.fireevent(event.java:198) @ javafx.scene.scene$mousehandler.process(scene.java:3724) @ javafx.scene.scene$mousehandler.access$1500(scene.java:3452) @ javafx.scene.scene.impl_processmouseevent(scene.java:1728) @ javafx.scene.scene$scenepeerlistener.mouseevent(scene.java:2461) @ com.sun.javafx.tk.quantum.glassvieweventhandler$mouseeventnotification.run(glassvieweventhandler.java:348) @ com.sun.javafx.tk.quantum.glassvieweventhandler$mouseeventnotification.run(glassvieweventhandler.java:273) @ java.security.accesscontroller.doprivileged(native method) @ com.sun.javafx.tk.quantum.glassvieweventhandler.handlemouseevent(glassvieweventhandler.java:382) @ com.sun.glass.ui.view.handlemouseevent(view.java:553) @ com.sun.glass.ui.view.notifymouse(view.java:925) @ com.sun.glass.ui.win.winapplication._runloop(native method) @ com.sun.glass.ui.win.winapplication.lambda$null$141(winapplication.java:102) @ com.sun.glass.ui.win.winapplication$$lambda$37/728890494.run(unknown source) @ java.lang.thread.run(thread.java:745)

as suggested in comments, recommend refactoring code uses bindings instead of listeners possible.

say have class room this:

class room { string getfoo(); stringproperty barproperty(); }

and want display "foo" , "bar" attributes of selected room in foolabel , barlabel, respectively. utilize easybind create bindings derived "selected room" property.

// wrap selecteditemproperty map , flatmap methods used below monadicobservablevalue<room> selectedroom = easybind.monadic( roomlist.getselectionmodel().selecteditemproperty()); foolabel.textproperty().bind(selectedroom.map(room::getfoo)); barlabel.textproperty().bind(selectedroom.flatmap(room::barproperty));

note when selectedroom holds null (i.e. no room selected), labels' text set null, displaying no text. if instead wanted display default text, this:

foolabel.textproperty().bind( selectedroom.map(room::getfoo).orelse("no room selected")); bindings improve style

preferring bindings on listeners improve style because binding states more declaratively text of foolabel is. here says

foolabel shows 'foo' attribute of selected room, or text "no room selected".

compare listener approach, where

foolabel shows whatever told show whatever part of code.

in other words, every listener side effect , side effects result in unreadable spaghetti code.

lambda nullpointerexception javafx

No comments:

Post a Comment