新 window 中的 JavaFX 进度指示器不会 "spin"

JavaFX progress indicator in a new window won't "spin"

我制作了登录屏幕,现在我必须做一些需要大约 8-10 秒的后台工作,我用进度指示器(不确定)制作了新的 window,但它只是弹出并且它是静态的(不旋转),我假设我在线程部分做错了,这里是代码:

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 应用程序线程,这意味着它无法更新 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() 方法中完成。