新窗口中的JavaFX进度指示器赢得';";旋转“;
我制作了登录屏幕,现在我必须做一些后台工作,大约需要8-10秒,我制作了一个带有进度指示器(不确定)的新窗口,但它只是弹出,是静态的(不旋转),我假设线程部分出了问题,下面是代码:新窗口中的JavaFX进度指示器赢得';";旋转“;,java,javafx,window,progress,indicator,Java,Javafx,Window,Progress,Indicator,我制作了登录屏幕,现在我必须做一些后台工作,大约需要8-10秒,我制作了一个带有进度指示器(不确定)的新窗口,但它只是弹出,是静态的(不旋转),我假设线程部分出了问题,下面是代码: Task<Boolean> loginTask = new Task<Boolean>() { @Override protected Boolean call() throws Exception { return true;
Task<Boolean> loginTask = new Task<Boolean>() {
@Override
protected Boolean call() throws Exception {
return true;
}
};
loginTask.setOnRunning(e -> {
//background task(collecting data)
});
它会弹出,但它是静态的:
我需要做什么才能使进度指示器旋转?您垄断了JavaFX应用程序线程,这意味着它无法更新UI,因此,ProgressIndicator
无法启动
Task loginTask=新任务(){
@凌驾
受保护的布尔调用()引发异常{
返回true;
}
};
loginTask.setOnRunning(e->{
//后台任务(收集数据)
});
您的评论表明您正在运行处理程序时执行实际工作,这不是使用任务的正确方法。当任务
进入运行
状态时,在FX线程上调用该处理程序;它的意思是作为一个回调,您可以在其中更新UI以指示状态的更改。任务的实际工作应该在后台线程上调用的call()
方法中完成
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();
}