the*_*who 3 java javafx window progress indicator
我做了登录屏幕,现在我必须做一些需要大约 8-10 秒的后台工作,我用进度指示器(不确定)创建了新窗口,但它只是弹出并且它是静态的(不旋转),我假设我在做一些事情线程部分错误,这是代码:
Task<Boolean> loginTask = new Task<Boolean>() {
@Override
protected Boolean call() throws Exception {
return true;
}
};
loginTask.setOnRunning(e -> {
//background task(collecting data)
});
Run Code Online (Sandbox Code Playgroud)
在这之后我做了这个:
Thread thread = new Thread(loginTask);
thread.setDaemon(true);
thread.start();
//progress indicator window
Parent p = null;
try {
p = FXMLLoader.load(getClass().getResource("/fxml/loginLoader.fxml"));
p.setVisible(true);
Scene scene = new Scene(p);
Stage wndw = new Stage();
this.loadingStage=wndw;
wndw.setTitle("Loading data... Please wait.");
wndw.setScene(scene);
wndw.show();
} catch (IOException ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
它弹出了,但它是静态的:
我需要做什么才能使进度指示器旋转?
您垄断了JavaFX 应用程序线程,这意味着它无法更新 UI,因此ProgressIndicator不会产生动画。
Task<Boolean> loginTask = new Task<Boolean>() {
@Override
protected Boolean call() throws Exception {
return true;
}
};
loginTask.setOnRunning(e -> {
//background task(collecting data)
});
Run Code Online (Sandbox Code Playgroud)
您的评论表明您正在onRunning处理程序中进行实际工作,这不是使用Task. 当Task进入RUNNING状态时,在 FX 线程上调用该处理程序;它意味着作为一个回调,例如,您可以更新 UI 以指示状态的变化。任务的实际工作应该call()在后台线程上调用的方法中完成。
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |