问题描述
如题我知道可以new一个Stage,然后show就行了。问题是我遇到了一个超神奇的问题我的程序是先是一个登陆框,登陆后跳转loading画面,最后进入主程序登录框我在登陆按钮上设监听器,然后执行new一个Stage的任务,loading窗口上没有任何交互按钮,所以我指定设个Initializable的控制器,在initialize里开个线程,异步newstage。当然newstage是在子线程中调用回调函数,在主线程完成的(很绕吧)以上我在java8都工作得很好,但不幸的是我更新到java8u20后,登录框转loading仍旧没问题,loading转主程序窗口就不行了。单步调试我发现一个惊人的事实,FXMLLoader.load(,,,)后竟然不返回了,所以我的stage自然也没机会show了。这真他妈的不可思议啊~publicvoidinitialize(URLarg0,ResourceBundlearg1){//TODOAuto-generatedmethodstubTask<Boolean>worker=newTask<Boolean>(){@OverrideprotectedBooleancall()throwsException{//TODOAuto-generatedmethodstub//loading窗口中真正的操作...ConcurrentUtils.runAndWait(()->{Stagestage=newStage();Parentroot=null;try{root=FXMLLoader.load(getClass().getResource("/main.fxml"));System.out.println("loaded!");Scenescene=newScene(root);stage.setTitle("OA");stage.setScene(scene);stage.show();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}((Stage)detail.getScene().getWindow()).close();});returntrue;}};newThread(worker).start();}
以上是我LoadingController的initialize方法
解决方案
解决方案二:
莫要沉啊,有木有大牛来回答啊