JavaFX-Créer une étape dans la tâche


J'essaie actuellement de créer un Stage dans un thread d'arrière-plan en utilisant l'objet Task<Stage>, qui ne fonctionne pas, car le Task ne se termine jamais.

Voici mon code:

Task<Stage> myTask = new Task<Stage>() {

    @Override
    protected Stage call() throws Exception {
        Stage stage = new Stage();
        return stage;
    }
};

myTask.setOnSucceeded(e -> {
    System.out.println("done :D");
});

 myTask.setOnFailed(e -> {
    System.out.println("oh no");
    myTask.getException().printStackTrace();
});

new Thread(myTask).start();

La méthode ci-dessus affiche {[6] } et le message d'exception suivant:

java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(Unknown Source)
at javafx.stage.Stage.<init>(Unknown Source)
at javafx.stage.Stage.<init>(Unknown Source)
at controller.ManageWebsiteTestsWindowController$OpenButton$1.call(ManageWebsiteTestsWindowController.java:77)
at controller.ManageWebsiteTestsWindowController$OpenButton$1.call(ManageWebsiteTestsWindowController.java:1)
at javafx.concurrent.Task$TaskCallable.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Lorsque j'utilise le même code pour créer par exemple Label , cela fonctionne parfaitement:

Task<Label> myTask = new Task<Label>() {

    @Override
    protected Label call() throws Exception {
        Label label = new Label("Hello World");
        return label;
    }
};
myTask.setOnSucceeded(e -> {
    System.out.println("done :D");
});

myTask.setOnFailed(e -> {
    System.out.println("oh no");
    myTask.getException().printStackTrace();
});

new Thread(myTask).start();

Qu'est-ce que je fais de mal?

Quelques informations générales: j'essaie de créer un objet Popout qui s'étend Stage.

Author: Angry Red Panda, 2018-02-14