我做了登录屏幕,现在我必须做一些后台工作,大约需要8-10秒,我用进度指示器(不确定)创建了一个新窗口,但是它只是弹出并且是静态的(不是旋转的),我想我是线程部分做错了,代码如下:
Task<Boolean> loginTask = new Task<Boolean>() {
@Override
protected Boolean call() throws Exception {
return true;
}
};
loginTask.setOnRunning(e -> {
//background task(collecting data)
});
此后,我这样做了:
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();
}
它弹出了,但是它是静态的:
我需要做什么才能使进度指示器旋转?
JavaFX Application Thread,这意味着它无法更新UI,因此ProgressIndicator
无法设置动画。
Task<Boolean> loginTask = new Task<Boolean>() {
@Override
protected Boolean call() throws Exception {
return true;
}
};
loginTask.setOnRunning(e -> {
//background task(collecting data)
});
您的评论建议您正在onRunning
处理程序中进行实际工作,这不是使用Task
的正确方法。当Task
进入RUNNING
状态时,将在FX线程上调用该处理程序;它是作为回调的,您可以在其中例如更新UI来指示状态的更改。该任务的实际工作应在后台线程上调用的call()
方法中完成。