Ich bin auf dem Hauptthread. Wenn Sie ein Element aus dem Menü auswählen, muss eine Datenbank aufgerufen werden, bevor die GUI das neue Feld anzeigen kann. Das braucht etwas Zeit. Während dieser Zeit möchte ich den Warte-Cursor zeigen. Ich habe einen Weg gefunden, aber der Code sieht hässlich aus. Wie könnte das eleganter gemacht werden? Diese Frage unterscheidet sich von anderen, weil die lange laufende Aufgabe auf der GUI funktioniert.JavaFX Cursor während des Wartens auf die GUI zu ändern ändern
menuitem.setOnAction(event -> { szene.setCursor(Cursor.WAIT);
Task<Void> task = new Task<Void>()
{
@Override
public Void call() throws Exception
{
Platform.runLater(new Runnable()
{
@Override
public void run()
{
// do some stuff
szene.setCursor(Cursor.DEFAULT);
}
});
return null;
};
};
new Thread(task).start();
});
die gesamte 'Task' Logik Putting innen' Platform.runLater' den gesamten Zweck besiegt einen 'Task' zu verwenden, da die Logik auf dem UI-Thread laufen würde , Blockieren von Updates (einschließlich Cursoränderungen). – Itai
Auf diese Weise ändert sich der Cursor in den Wartezustand und zurück. Der Code funktioniert, aber es ist hässlich. –
Die lang andauernde Aufgabe besteht darin, die Benutzeroberfläche zu aktualisieren, daher ist es korrekt, sie im UI-Thread auszuführen. Ich habe eine andere Frage gefunden: http://stackoverflow.com/questions/27309642/javafx-updating-ui-from-a-thread-without-direct-calling-platform-runlater Vielleicht ist meine Lösung die richtige. –