[英]Why is my scheduled method called twice in a JavaFX 2.2 Service
请参见以下示例:
public class Test extends Application {
public static void main(final String[] args) {
launch(args);
}
@Override
public void start(final Stage primaryStage) {
primaryStage.setTitle("Hi!");
primaryStage.setScene(new Scene(new BorderPane()));
primaryStage.show();
Service<Void> myService = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected void cancelled() {
super.cancelled();
System.out.println(Thread.currentThread().getName() + " - cancelled() called");
}
@Override
protected void failed() {
super.failed();
System.out.println(Thread.currentThread().getName() + " - failed() called");
}
@Override
protected void running() {
super.running();
System.out.println(Thread.currentThread().getName() + " - running() called");
}
@Override
protected void succeeded() {
super.succeeded();
System.out.println(Thread.currentThread().getName() + " - succeeded() called");
}
@Override
protected void scheduled() {
super.scheduled();
System.out.println(Thread.currentThread().getName() + " - scheduled() called");
}
@Override
protected Void call() throws Exception {
System.out.println(Thread.currentThread().getName() + " - call() called");
return null;
}
};
}
};
myService.stateProperty().addListener(new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> arg0, State arg1, State newValue) {
System.out.println("State: " + newValue);
}
});
myService.start();
}
}
这给出以下输出:
状态:已排定
JavaFX应用程序线程-Scheduled()称为
线程4-call()被调用
JavaFX应用程序线程-Scheduled()称为
状态:RUNNING
JavaFX应用程序线程-running()称为
状态:成功
JavaFX应用程序线程-成功调用了()
请注意,此行出现两次:
JavaFX应用程序线程-Scheduled()称为
这意味着“ scheduled()”方法被调用两次。 我希望该方法仅被调用一次。 我做错什么了吗,这是bug,我会误解API吗?
谢谢!
Worker对象的生命周期定义如下。 创建后,Worker对象处于READY状态。 在安排工作后,Worker对象将转换为SCHEDULED状态。 之后,当Worker对象正在执行工作时,其状态将变为RUNNING。 请注意,即使在没有计划的情况下立即启动Worker对象,它也会先转换为SCHEDULED状态,然后再转换为RUNNING状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.