Heim > Datenbank > MySQL-Tutorial > Wie aktualisiere ich die JavaFX-Benutzeroberfläche sicher aus Hintergrund-Datenbank-Threads?

Wie aktualisiere ich die JavaFX-Benutzeroberfläche sicher aus Hintergrund-Datenbank-Threads?

Barbara Streisand
Freigeben: 2024-12-26 19:29:09
Original
790 Leute haben es durchsucht

How to Safely Update JavaFX UI from Background Database Threads?

Verwenden von Threads zum Erstellen von Datenbankanforderungen mit JavaFX

JavaFX schreibt zwei grundlegende Regeln für Threads vor:

  1. Alle Die Interaktion mit dem Status eines Szenendiagrammknotens sollte in der JavaFX-Anwendung ausgeführt werden Thread.
  2. Langwierige Vorgänge sollten in einem Hintergrundthread ausgeführt werden.

Ausnahme aufgetreten

Die Ausnahme, auf die Sie gestoßen sind, ist auf den Aktualisierungsversuch zurückzuführen die Benutzeroberfläche (courseCodeLbl.setText(...)) aus einem anderen Thread als der JavaFX-Anwendung Thread.

Threading korrekt implementieren

Um sicherzustellen, dass Datenbankanforderungen in einem separaten Thread ausgeführt werden, führen Sie die folgenden Schritte aus:

  • Erstellen Sie ein Runnable Klasse und implementieren Sie die run()-Methode, die die Datenbankanforderung enthält.
  • Übergeben Sie eine Instanz dieser Klasse an den Thread-Konstruktor und starten Sie die Thread.
  • Verwenden Sie Platform.runLater(Runnable r), um die Benutzeroberfläche mit den Datenbankergebnissen zu aktualisieren.

Implementieren von Threading mit JavaFX.concurrent

JavaFX stellt die Task-Klasse bereit, die speziell für die Verwaltung von Hintergrundthreads und die Aktualisierung entwickelt wurde UI.

  • Erstellen Sie ein Task-Objekt und definieren Sie den Datenbankaufruf in der call()-Methode.
  • Verwenden Sie updateProgress(...) und updateMessage(...), um das zu aktualisieren Benutzeroberfläche während der Ausführung.
  • Registrieren Sie die Handler setOnSucceeded(...) und setOnFailed(...), um Ergebnisse zu verarbeiten und zu verarbeiten Fehler.
  • Rufen Sie die Aufgabe mit einem Task.Executor auf (z. B. Executors.newCachedThreadPool).

Beispielimplementierung

Task<Course> courseTask = new Task<Course>() {
    @Override
    public Course call() throws Exception {
        return myDAO.getCourseByCode(courseCode);
    }
};
courseTask.setOnSucceeded(e -> {
    Course course = courseTask.getCourse();
    if (course != null) {
        courseCodeLbl.setText(course.getName());
    }
});
exec.execute(courseTask);
Nach dem Login kopieren

In diesem Beispiel wird der Datenbankzugriff in einer Aufgabe durchgeführt und das UI-Update wird im JavaFX-Anwendungsthread mithilfe von geplant setOnSucceeded-Handler. Wenn Sie diese Richtlinien befolgen, können Sie Threads effektiv nutzen, um Datenbankanforderungen zu optimieren und gleichzeitig die Reaktionsfähigkeit der Benutzeroberfläche in JavaFX-Anwendungen aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich die JavaFX-Benutzeroberfläche sicher aus Hintergrund-Datenbank-Threads?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage