Hen*_*Lin 5 java multithreading javafx
我在这里展示了我欢迎场景的图像.
" 创建新项目"按钮的当前行为如下所示:
Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow();
stage.hide();
Parent root = FXMLLoader.load(getClass().getResource("/view/scene/configure/NewProjectConfigureScene.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Configure New Project Settings");
stage.setScene(scene);
stage.show();
Run Code Online (Sandbox Code Playgroud)
用文字解释:按下按钮 - >我得到舞台 - >隐藏当前场景 - >切换舞台以获得新场景 - >重新显示舞台.这种行为很有效.
我是GUI编程的新手,所以当我解释我需要的东西时,请耐心等待.
我现在想添加一个小功能,其中在新建项目时按下按钮,将显示在当前场景加载消息,我迫使GUI等待几秒钟(使用户有时间来看看这个"装"消息",然后继续进入下一个场景.加载消息看起来像这样.
我真的想要实现这个功能,因为加载消息后面的等待可能更直观,从而改善了我在使用程序时的用户体验.
我最初的尝试是做以下事情:
statusText.setText("Please wait..."); // statusText is the "loading message"
Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow();
try {
Thread.sleep(2000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
stage.hide();
Parent root = FXMLLoader.load(getClass().getResource("/view/scene/configure/NewProjectConfigureScene.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Configure New Project Settings");
stage.setScene(scene);
stage.show();
Run Code Online (Sandbox Code Playgroud)
我刚读到这里你永远不会睡觉UI线程,因为它会冻结整个应用程序.所以我一直在尝试从上面链接的第一个答案中提到的方法,它说要使用javafx.concurrent.Task,但是我已经尝试了很长时间无济于事.
如何更新UI,强行等待几秒钟,然后显示新场景?
jew*_*sea 11
暂停完成后,使用PauseTransition并加载新场景,而不是休眠线程.
createNewProject.setOnAction(event -> {
statusText.setText("Please wait...");
PauseTransition pause = new PauseTransition(
Duration.seconds(1),
);
pause.setOnFinished(event -> {
Parent root = FXMLLoader.load(
getClass().getResource(
"/view/scene/configure/NewProjectConfigureScene.fxml"
)
);
Scene scene = new Scene(root);
stage.setTitle("Configure New Project Settings");
stage.setScene(scene);
stage.sizeToScene();
});
pause.play();
});
Run Code Online (Sandbox Code Playgroud)
上面的代码假设您只有一个阶段,因此您可以调整"欢迎"阶段的大小,使其成为"配置新项目设置"阶段.
| 归档时间: |
|
| 查看次数: |
5859 次 |
| 最近记录: |