[英]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.