我有一个并发任务,可以处于两种状态-活动(工作)和暂停(通过Thread.sleep(xxxx)
). 当任务工作时,不确定ProgressIndicator
应该可见,以向用户显示存在正在运行的Task
.当任务暂停时,不应显示ProgressIndicator
.
这是我的解决方案:
public class JavaFxTest7 extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
var indicator = new ProgressIndicator();
indicator.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS);
var vBox = new VBox(indicator);
var scene = new Scene(vBox, 300, 200);
stage.setScene(scene);
stage.show();
Task<Boolean> task = new Task<Boolean>() {
@Override
protected Boolean call() throws Exception {
while(!isCancelled()) {
this.updateValue(true);
for (long l = 1; l < 150000L; l++) {
System.out.println("Working");
}
System.out.println("Pause");
this.updateValue(false);
Thread.sleep(2500);
}
return null;
}
};
indicator.visibleProperty().bind(task.valueProperty());
new Thread(task).start();
}
}
此代码按预期工作,并完成了我需要的一切.然而,我不喜欢这个解决方案,因为它不符合逻辑.我用任务值来控制指标的可见性,效果不好.我想将监听器添加到Task
个状态属性,但据我所知,我无法控制状态.
对于这样的问题有更好的解决方案吗?也许我应该使用Service
而不是Task
?