请参阅以下示例:
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应用程序线程 - 调度()调用
Thread-4 - call()叫做
JavaFX应用程序线程 - 调度()调用
状态:运行中 JavaFX应用程序线程 - running()称为
国家:成功的 JavaFX应用程序线程 - 成功()调用
请注意,此行会出现两次:
JavaFX应用程序线程 - 已调度()
这意味着“scheduled()”方法被调用两次。 我原以为只能调用一次这个方法。 我做错了什么,这是错误,我是否误解了API?
谢谢!
答案 0 :(得分:0)
Worker对象的生命周期定义如下。创建时,Worker对象处于READY状态。在计划工作时,Worker对象转换为SCHEDULED状态。之后,当Worker对象执行工作时,其状态变为RUNNING。 请注意,即使在没有安排的情况下立即启动Worker对象,它也会首先转换为SCHEDULED状态,然后转换为RUNNING状态。