package concurrent.task;
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Lifecycle extends Application {
private ExecutorService executorService = Executors.newSingleThreadExecutor();
private final Task<Void> theTask = new TheTask();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
dumpTaskState();
theTask.addEventHandler(WorkerStateEvent.ANY, new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent workerStateEvent) {
dumpTaskState();
}
});
stage.setScene(new Scene(new Button("nothing to see, walk along ...")));
stage.show();
executorService.submit(theTask);
}
private void dumpTaskState() {
System.out.println(theTask.stateProperty().getValue());
}
@Override
public void stop() throws Exception {
executorService.shutdown();
}
}