1

在任务执行过程中进度指示器运行平稳,但当任务结束时进度指示器继续转动。我希望这个任务的结束进度指示器停止。这是我的代码

nextButton.setDisable(true);
task = createWorker();          
progressInd.progressProperty().bind(task.progressProperty());
th = new Thread(task);          
th.start();                     

这是我的任务。

public Task createWorker() {
    return new Task() {
        @Override
        protected Object call() throws Exception {
            list = new LinkedList<BufferedImage>();
            list = vX.getFrame(path.getText());
            System.out.println(list.size());
            vX.getCorruptedImage((LinkedList<BufferedImage>) list);
            progressInd.progressProperty().unbind();
            progressInd.setProgress(task.getProgress());
            nextButton.setDisable(false);
            return output;
        }
    };
}
4

1 回答 1

1

您无法从后台线程更改 UI,因此这些行

progressInd.progressProperty().unbind();
progressInd.setProgress(task.getProgress());
nextButton.setDisable(false);

不应在您的call()方法中执行。

相反,你应该这样做

nextButton.setDisable(true);
task = createWorker();          
progressInd.progressProperty().bind(task.progressProperty());
task.setOnSucceeded(e -> {
    progressInd.progressProperty().unbind();
    progressInd.setProgress(1); // mark as complete...
    nextButton.setDisable(false);
});
// always good practice to (at a minimum) log exceptions if they occur:
task.setOnFailed(e -> task.getException().printStackTrace());
th = new Thread(task);          
th.start();  
于 2016-03-14T17:02:47.400 回答