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
.
0
Author: Angry Red Panda, 2018-02-14