新窗口中的 JavaFX 进度指示器不会“旋转”

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)

它弹出了,但它是静态的:

在此处输入图片说明

我需要做什么才能使进度指示器旋转?

Sla*_*law 5

您垄断了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()在后台线程上调用的方法中完成。