Hallo zusammen,
irgendwie bekomme ich trotz UI Thread via Runnable, TimerTask, Task, Platform.runLater Varianten trotzdem UI Freeze, obwohl anwendungsmäßig nicht viel beansprucht wird.
Woran kann es liegen`?
Was wird gemacht? Ich habe eine ListView, sobald ich auf ein Item selektiere wird in der Datenbank ein select mit der Id gemacht und gibt eine Liste der Ergebnisse und stellt sie in eine zweite ListView dar. Die Oberfläche hängt trotzdem immer ca. 3-5 Sekunden auf.
Wenn ich den Task in ein Thread packe und per start mache, funktioniert das verzögert, aber dann müsste ich in den call methode noch Platform.runLater rein machen, sonst kann ich die zweite ListView nicht updaten.
hier ein kleiner Ausschnitt
Bitte schaut nicht so streng auf den Code, das ist syntaktisch ein bisschen abweichend zu Java (Xtend). Es geht mir mehr oder weniger um den Inhalt wie ich das lösen kann, damit die UI beim Holen der Daten die UI nicht einfriert.
Datenmäßig sind noch nicht so viele in der Datenbank. Überschaubar ca. 20 Entries, verbraucht trotzdem 2-5 sekunden zum Laden.
Viele Grüße
lam
irgendwie bekomme ich trotz UI Thread via Runnable, TimerTask, Task, Platform.runLater Varianten trotzdem UI Freeze, obwohl anwendungsmäßig nicht viel beansprucht wird.
Woran kann es liegen`?
Was wird gemacht? Ich habe eine ListView, sobald ich auf ein Item selektiere wird in der Datenbank ein select mit der Id gemacht und gibt eine Liste der Ergebnisse und stellt sie in eine zweite ListView dar. Die Oberfläche hängt trotzdem immer ca. 3-5 Sekunden auf.
Wenn ich den Task in ein Thread packe und per start mache, funktioniert das verzögert, aber dann müsste ich in den call methode noch Platform.runLater rein machen, sonst kann ich die zweite ListView nicht updaten.
hier ein kleiner Ausschnitt
Java:
documentTable.selectionModel.selectedItemProperty.addListener [
val selection = documentTable.selectionModel.selectedItem
nameLabel.textProperty.bind(selection.nameProperty)
createdLabel.textProperty.bind(Bindings.convert(selection.create_timestampProperty))
statusLabel.textProperty.bind(Bindings.convert(selection.statusProperty))
statusTextLabel.textProperty.bind(Bindings.convert(selection.statustextProperty))
updateLabel.textProperty.bind(Bindings.convert(selection.update_timestampProperty))
fileList.items.clear
new Thread(new DocFileUpdaterTask(fileList, selection.id)).start
]
Code:
class DocFileUpdaterTask extends Task<Void> {
ListView<DocumentFile> listView
@Accessors int id
new(ListView<DocumentFile> listView, int id) {
this.listView = listView
this.id=id
}
override protected call() throws Exception {
Platform.runLater[
listView.items.clear
listView.items += ApplicationConfig.Instance.docFileDao.getDocFilesByDocId(id)
]
null
}
}
Bitte schaut nicht so streng auf den Code, das ist syntaktisch ein bisschen abweichend zu Java (Xtend). Es geht mir mehr oder weniger um den Inhalt wie ich das lösen kann, damit die UI beim Holen der Daten die UI nicht einfriert.
Datenmäßig sind noch nicht so viele in der Datenbank. Überschaubar ca. 20 Entries, verbraucht trotzdem 2-5 sekunden zum Laden.
Viele Grüße
lam