Hi,
normalerweise weiß ich, wie man die GUI aus einem anderen oder dem selben Thread updated, doch leider funktioniert es diesmal nicht und ich weiß nicht woran es liegt.
Das Problem ist, dass die GUI bzw. die TextArea nicht geupdated wird.
Vielleicht kann mir jemand helfen?
Ich habe mir eine kleine Hilfsmethode gebastelt, um festzustellen, ob ich mich derzeit im FX Thread befinde oder nicht und führe dementsprechend mein Runnable aus:
Die Methode befindet sich in meiner Controller-Klasse und indirekt durch die Main aufgerufen:
Der FXMLController ruft seine View selbst auf. Es geht um die letzten Zeilen ab "cnt.appendLog(42)".
In appendLog(...) passert nicht mehr als das der Text der TextArea mit dem Parameter von appendLog(...) konkateniert wird und dann wird
aufgerufen.
Wo ist das Problem?
Wenn ich das Programm starte, dann wird zwar eine Stage anzeigt, die aber nur grau ist und alle Komponenten fehlen. Erst wenn du Schleife zuende ist, werden die Komponenten angezeigt. Aber ich will ja, dass die Stage geladen wird und im Hintergrund soll man die GUI updaten können.
normalerweise weiß ich, wie man die GUI aus einem anderen oder dem selben Thread updated, doch leider funktioniert es diesmal nicht und ich weiß nicht woran es liegt.
Das Problem ist, dass die GUI bzw. die TextArea nicht geupdated wird.
Vielleicht kann mir jemand helfen?
Ich habe mir eine kleine Hilfsmethode gebastelt, um festzustellen, ob ich mich derzeit im FX Thread befinde oder nicht und führe dementsprechend mein Runnable aus:
Code:
private void runSafe(Runnable runnable) {
Objects.requireNonNull(runnable, "runnable");
if (Platform.isFxApplicationThread()) {
System.out.println("On FX Thread");
runnable.run();
} else {
System.out.println("Not on FX Thread");
Platform.runLater(runnable);
}
}
Die Methode befindet sich in meiner Controller-Klasse und indirekt durch die Main aufgerufen:
Code:
@Override
public void start(Stage stage) throws Exception {
FXMLController cnt = new FXMLController("Mit Header", "und mit Content");
cnt.setAppendType(AppendType.END);
Scene scene = new Scene(cnt);
scene.getStylesheets().add("/styles/Styles.css");
stage.setTitle("JavaFX and Maven");
stage.setScene(scene);
stage.show();
cnt.appendLog(42);
for (int i = 0; i < 200000000; i++) {
int k = 55;
int l = 55 + 22 << 2;
int f = l + k - 200;
int x = k * l - f ^ 2;
int y = x + i;
cnt.append(y, true);
}
cnt.append(0110, true);
}
Der FXMLController ruft seine View selbst auf. Es geht um die letzten Zeilen ab "cnt.appendLog(42)".
In appendLog(...) passert nicht mehr als das der Text der TextArea mit dem Parameter von appendLog(...) konkateniert wird und dann wird
Code:
runSafe(() -> {
logArea.appendText(s);
});
aufgerufen.
Wo ist das Problem?
Wenn ich das Programm starte, dann wird zwar eine Stage anzeigt, die aber nur grau ist und alle Komponenten fehlen. Erst wenn du Schleife zuende ist, werden die Komponenten angezeigt. Aber ich will ja, dass die Stage geladen wird und im Hintergrund soll man die GUI updaten können.
Zuletzt bearbeitet: