JavaFx 怎么从一个窗口打开另一个新窗口

vipcxj 2014-09-19 03:02:46
如题
我知道可以new一个Stage,然后show就行了。问题是我遇到了一个超神奇的问题
我的程序是先是一个登陆框,登陆后跳转loading画面,最后进入主程序
登录框我在登陆按钮上设监听器,然后执行new一个Stage的任务,loading窗口上没有任何交互按钮,所以我指定设个
Initializable的控制器,在initialize里开个线程,异步new stage。当然new stage是在子线程中调用回调函数,在主线程完成的(很绕吧)
以上我在java8都工作得很好,但不幸的是我更新到java8u20后,登录框转loading仍旧没问题,loading转主程序窗口就不行了。单步调试我发现一个惊人的事实,FXMLLoader.load(,,,)后竟然不返回了,所以我的stage自然也没机会show了。
这真他妈的不可思议啊~


public void initialize(URL arg0, ResourceBundle arg1) {
// TODO Auto-generated method stub
Task<Boolean> worker = new Task<Boolean>() {

@Override
protected Boolean call() throws Exception {
// TODO Auto-generated method stub
//loading窗口中真正的操作
...
ConcurrentUtils.runAndWait(() -> {
Stage stage = new Stage();
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("/main.fxml"));
System.out.println("loaded!");
Scene scene = new Scene(root);
stage.setTitle("OA");
stage.setScene(scene);
stage.show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
((Stage)detail.getScene().getWindow()).close();
});
return true;
}
};

new Thread(worker).start();
}

以上是我LoadingController的initialize方法
...全文
3036 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
vipcxj 2014-09-19
  • 打赏
  • 举报
回复
莫要沉啊,有木有大牛来回答啊

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧