您的任务不发布中间更新。此外
Service
用于在后台线程中运行任务,以避免阻塞JavaFX应用程序线程。因此,如果在启动服务后直接访问该值,则很可能不会分配该值。最好使用
value
属性以在分配数据时检索数据。
public class TimeManager extends Service<String> {
@Override
protected Task<String> createTask() {
return new Task<String>() {
int i = 0;
@Override
protected String call() throws Exception {
String txt = null;
while (!isCancelled()) {
txt = Integer.toString(++i);
updateValue(txt);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
return txt;
}
};
}
}
TimeManager time = new TimeManager();
label.textProperty().bind(time.valueProperty());
time.start();
注意,在这种情况下,可能不需要服务,因为您只运行一个任务。运行
Task
实例使用
new Thread(task).start()
可能就足够了。
此外,还有更好的选项可用于调度GUI的快速重复更新,请参见
JavaFX periodic background task