請看下面的例子叫了兩聲安排方法:爲什麼我在一個JavaFX 2.2服務
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應用程序線程 - 計劃()調用
線程4 - 調用()調用
JavaFX Application Thread - scheduled() )稱爲
狀態:運行
的JavaFX應用程序線程 - 運行()稱爲
國家:繼任
的JavaFX應用程序線程 - 成功()稱爲
注意,此行中出現了兩次:
JavaFX Application Thread - scheduled()called
這意味着「scheduled()」方法被調用兩次。 我會期待該方法只被調用一次。 我做錯了什麼,這是錯誤,我誤解了API?
謝謝!
嗨!謝謝你試圖回答這個問題,但你的回答並不回答這個問題。我的問題不是爲什麼工人/服務總是處於預定狀態。它是:爲什麼scheduled()方法在一個生命週期中被調用**兩次**(緊接在一起)。 – cranphin
嗨!當創建服務對象時,狀態爲READY,然後立即進入SCHEDULED狀態(因此您將打印前4行)。然後稍後調用調度程序時,應用程序將運行,並且任務狀態將設置爲SCHEDULED(最後狀態),然後調用...(由此您將打印其餘行)。希望這有幫助! – Edwin