java - JavaFX Application returning NullPointerException when other Scene is called (just sometimes) -
my application has login scene , main view scene, happening when login , mainview called exception:
java.lang.nullpointerexception @ javafx.scene.scene.focusinitial(scene.java:1879) @ javafx.scene.scene.access$3600(scene.java:170) @ javafx.scene.scene$scenepulselistener.focuscleanup(scene.java:2181) @ javafx.scene.scene$scenepulselistener.pulse(scene.java:2221) @ com.sun.javafx.tk.toolkit.firepulse(toolkit.java:363) @ com.sun.javafx.tk.quantum.quantumtoolkit.pulse(quantumtoolkit.java:460) @ com.sun.javafx.tk.quantum.quantumtoolkit$9.run(quantumtoolkit.java:329) @ com.sun.glass.ui.win.winapplication._runloop(native method) @ com.sun.glass.ui.win.winapplication.access$100(winapplication.java:29) @ com.sun.glass.ui.win.winapplication$3$1.run(winapplication.java:73) @ java.lang.thread.run(thread.java:722) the curious doesn't happening always, just sometimes.
my class:
public class targetappdesktop extends application { @override public void start(stage primarystage) throws ioexception { scene scene = new scene(new anchorpane()); loginmanager loginmanager = new loginmanager(scene); loginmanager.showloginscreen(); primarystage.setresizable(false); primarystage.setscene(scene); primarystage.show(); primarystage.setoncloserequest(new eventhandler<windowevent>() { @override public void handle(windowevent t) { mainviewcontroller.deletetempfiles(); platform.exit(); system.exit(0); } }); } public static void main(string[] args) { launch(args); } } my login manager class
public class loginmanager { private scene scene; loginmanager(scene scene) { this.scene = scene; } public void logout() { showloginscreen(); } void showloginscreen() { try { fxmlloader loader = new fxmlloader( getclass().getresource("login.fxml")); // scene.getstylesheets().add(this.getclass().getresource("login.css").toexternalform()); scene.setroot((parent) loader.load()); logincontroller controller = loader.<logincontroller>getcontroller(); controller.initmanager(this); } catch (ioexception ex) { logger.getlogger(loginmanager.class.getname()).log(level.severe, null, ex); } } void showmainviewscreen(login logintargetapp, login logingateway, gateway gateway, file file, arraylist<integer> anolist) { try { fxmlloader loader = new fxmlloader(getclass().getresource("mainview.fxml")); scene.setroot((parent) loader.load()); mainviewcontroller controller = loader.<mainviewcontroller>getcontroller(); controller.initsessionid(this, scene, logintargetapp, logingateway, gateway, file, anolist); } catch (exception ex) { logger.getlogger(loginmanager.class.getname()).log(level.severe, null, ex); } } void autheticated(login logintargetapp, login logingateway, gateway gateway, file file, arraylist<integer> anolist) { showmainviewscreen(logintargetapp, logingateway, gateway, file, anolist); } }
this problem ocurring because trying change scene in thread, must changed in javafx main thread, simple platform.runlater solved problem.
more detail can find here. (jira link)
Comments
Post a Comment