JavaFX Verzögerung beim Laden von Daten

lam_tr

Top Contributor
Hallo zusammen,

ich habe ein Problem, dass ich ca. 30000 Datensätze per Hibernate auf ein Datenbank in die UI laden muss. Gibt es einen weg das zu machen dass die UI nicht einfriert. Momentan mache ich es über einen Button der direkt die Abfrage macht und die Daten in einer Tabelle darstellt.

Ich habe gehört von separaten UI Thread.

Ist das richtig so, oder wie geht man da vor?

Viele Grüße
lam
 

Jardcore

Top Contributor
Das ist richtig. Wie du schon erkannt hast friert der Application Thread deiner Anwendung ein wenn du zuviel machst... qed : neuer Thread :)
 

Joose

Top Contributor
Operationen die länger brauchen bei der Ausführung sollten nicht im UI Thread (EDT) ausgeführt werden, daher kommt das einfrieren der UI (der Thread ist mit dem auslesen der DB beschäftigt und kann daher nichts neuzeichnen). Stichwörter zu diesem Thema: EventDispatcherThread, SwingWorker, ... (natürlich vorrausgesetzt es handelt sich dabei um Swing, wie es bei JavaFX genau ist weiß ich nicht).

Anmerkung: Es macht keinen Sinn 30000 Datensätze aus der DB zu lesen und anzeigen zulassen. Zeig mir den Bildschirm der sinnvoll alle diese Datensätze auf einmal darstellen kann. Daher lade immer nur einen bestimmten Teil der Daten in den Speicher.
Beispiel: Du hast eine Liste welche dir ca 30 Datensätze auf einmal anzeigen kann. Anstatt nun alle 30000 Datensätze zu laden, ladest du nur maximal 90 Datensätze.
30 Datensätze können angezeigt werden, die anderen 60 dienen jeweils als "Buffer" für ein sauberes scrollen. Sobald du scrollst werden im Hintergrund eben entsprechend viele Datensätze nachgeladen.

Sind die 30000 Datensätze nicht als eine Liste zu sehen sondern komplexe Objekte inkl Beziehungen dann solltest du dir LazyLoading anschauen. Da werden die Daten erst vollständig geladen wenn benötigt.
Beispiel: Du hast eine Liste mit ein paar hundert Einträgen + ein Detailfenster für den aktuell ausgewählten Eintrag. Anstatt zu allen Einträgen in der Liste die kompletten Details zu laden, wird nur die Liste geladen und erst wenn du einen entsprechenden Eintrag auswählst werden die restlichen Daten aus der DB geladen.
 

lam_tr

Top Contributor
Hallo Joose,

vielen Dank für die ausführliche Erklärung. Lazy Loading hört sich sehr gut an. Wie kann ich das an sich realisieren?

Mir fehlt momentan der Gedanke iw eich es umsetzen soll. Du hast mir zwar Gedankenzüge erklärt. Also wenn ich in der Tabelle zum Beispiel die ersten 90 Einträge anzeigen soll, und genau an der Stelle hänge ich, wie lade ich die ersten 90 per Select? Die 90 ersten aktuellen, und wenn ich runtergescrollt habe zum letzten die Einschränkung vom ab 90 aktuellen bis 180 aktuellsten? Und das ganze wieder rückwärts?

Es hört sich auf jeden Fall sehr aufwändig an.

Kannst du mir noch weitere Tipps dazu geben`?

Viele Grüße
lam
 

Joose

Top Contributor
Achtung: Ich habe es etwas vermischt ;)
Eager und LazyLoading beziehen sich im großen und ganzen auf die Vollständigkeit der Datensätze.
Das "vorladen" von Datensätze wäre ein Art Buffer.

Beispiel MySql:
In einem einfache SQL Select kannst du mittels "LIMIT [Anzahl]" bzw. "LIMIT [Index], [Anzahl]" die Ergebnismenge begrenzen. Je nach SQL Dialekt kann es auch MAX ROWS oder ähnliches sein.
Ob es in Hibernate eine alternative dafür gibt weiß ich leider nicht.
 

dzim

Top Contributor
JavaFX zeigt hat einen eigenen Abschnitt zu Concurrency:
https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm

Hier kannst du sehen, das du die "observierbaren" Klassen

- Task (eine Erweiterung von "Future", die du wie einen Thread nutzen kannst, die dir aber noch ein paar Livecycle-Events spendiert, an die du dich anhängen kannst)
- und Service (mit einer Methode, einen Task zu erstellen und das direkt einen Executor mitbringt - kannst also theoretisch schnell hintereinander Aufgaben starten und deren Ergebnis verarbeiten - auch hier bringt Service einige Methoden mit, wo du dich registrieren kannst)

verwenden kannst, um deine Arbeit nicht auf dem UI-Thread durchzuführen.

Ich habe rein mit Tasks gearbeitet, um meine DB-(SQLite-)Abfragen vom UI zu trennen, du musst dann auf das Success/Fail/Canceled hören. Oder du schiebst zwischendurch schon Daten in eine Oberservable rein (aber dann musst du darauf achten, dass du es mit Platform#runLater machst, wenn du es direkt aus dem Task heraus auslöst - sinnvoll nur, wenn du einen Prozess mit Zwischeergebnissen hast, die nicht einen rein auf Double basierten Fortschritt der Operation darstellen).

Siehe auch:
https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html
https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Service.html
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
E Swing Verzögerung beim Hinzufügen / Ändern von Swingkomponenten AWT, Swing, JavaFX & SWT 3
S Verzögerung zwischen Cursorbewegung einbauen AWT, Swing, JavaFX & SWT 1
F Verzögerung bei der ersten Anzeige AWT, Swing, JavaFX & SWT 6
J Verzögerung bei Änderungen der Anzeige abwarten AWT, Swing, JavaFX & SWT 5
hdi Problem mit ToolTip: Aussehen/Verzögerung AWT, Swing, JavaFX & SWT 7
P Swing Verzögerung von repaint() umgehen AWT, Swing, JavaFX & SWT 15
W Verzögerung à la Tooltip bei mouseEntered AWT, Swing, JavaFX & SWT 19
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
G Gui updated beim zweiten Aufruf nicht mehr AWT, Swing, JavaFX & SWT 15
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Kann mir jemand beim MediaPlayer helfen ? AWT, Swing, JavaFX & SWT 2
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
ruutaiokwu Swing windowStateChanged macht exakt das Gegenteil beim Verändern der Fenstergrösse AWT, Swing, JavaFX & SWT 3
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
steven789hjk543 Swing Verstehe etwas beim GUI nicht AWT, Swing, JavaFX & SWT 3
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
L Charset beim Drucken falsch AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
W Kodierung (CharSet) beim Schreiben ändern AWT, Swing, JavaFX & SWT 1
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
P Scrollbalken verschwinden beim Zoomen AWT, Swing, JavaFX & SWT 4
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
D JavaFX build.fxbuild error beim Erstellen einer exe AWT, Swing, JavaFX & SWT 2
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing Vorgehen beim Aufruf der Klassen/Methoden AWT, Swing, JavaFX & SWT 7
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben