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