Heim > Java > javaLernprogramm > Wie implementiert man Threading für Datenbankanforderungen in JavaFX ordnungsgemäß, um eine Blockierung der Benutzeroberfläche zu vermeiden?

Wie implementiert man Threading für Datenbankanforderungen in JavaFX ordnungsgemäß, um eine Blockierung der Benutzeroberfläche zu vermeiden?

Susan Sarandon
Freigeben: 2024-12-26 10:20:12
Original
609 Leute haben es durchsucht

How to Properly Implement Threading for Database Requests in JavaFX to Avoid UI Blocking?

Threading für Datenbankanforderungen implementieren

Sie stoßen auf eine Ausnahme, weil Sie über einen separaten Thread auf die JavaFX-Benutzeroberfläche zugreifen. So können Sie Threading korrekt implementieren:

Allgemeine Prinzipien des Threadings in JavaFX

  • Regel 1:Jede Änderung oder jeder Zugriff auf das Szenendiagramm muss am durchgeführt werden der FX-Anwendungsthread.
  • Regel 2:Lang laufende Vorgänge sollten ausgeführt werden Nicht-FX-Anwendungsthreads.

Implementierung mithilfe von Threads

Erstellen Sie einen Thread und starten Sie die Datenbankanforderung darauf:

Thread t = new Thread(new Runnable() {
    public void run() {
        requestCourseName();
    }
}, "Thread A");

t.start();
Nach dem Login kopieren

Verwenden der JavaFX Concurrent API

Die javafx.concurrent-API bietet eine praktische Möglichkeit, Hintergrundthreads zu verwalten und zu aktualisieren Benutzeroberfläche.

  • Aufgabe: Kapseln Sie den Hintergrundvorgang.
  • Hintergrundaufgaben-Thread: Führt die call()-Methode der Aufgabe im Hintergrund aus Thread.
  • FX-Anwendungsthread: Aktualisiert die Benutzeroberfläche nach Abschluss über ein Ereignis Handler, die für Task registriert sind.

Beispiel für die Verwendung von WidgetDAO und Task

// DAO encapsulates database access
public class WidgetDAO {
    public List<Widget> getWidgetsByType(String type) { ... }
}

// Controller handles UI operations
public class MyController {
    private WidgetDAO widgetAccessor;
    private Executor exec;

    public void searchWidgets() {
        String searchString = widgetTypeSearchField.getText();
        Task<List<Widget>> widgetSearchTask = new Task<>() {
            @Override
            protected List<Widget> call() throws Exception {
                return widgetAccessor.getWidgetsByType(searchString);
            }
        };

        widgetSearchTask.setOnSucceeded(e -> widgetTable.getItems().setAll(widgetSearchTask.getValue()));
        exec.execute(widgetSearchTask);
    }
}
Nach dem Login kopieren

Beispiel für die Verwendung von MyDAO und Task

// DAO encapsulates database access
public class MyDAO {
    public Course getCourseByCode(int code) { ... }
}

// Controller handles UI operations
public class MyController {
    private MyDAO myDAO;
    private Executor exec;

    public void searchCourse() {
        int courseCode = Integer.valueOf(courseId.getText());
        Task<Course> courseTask = new Task<>() {
            @Override
            protected Course call() throws Exception {
                return myDAO.getCourseByCode(courseCode);
            }
        };

        courseTask.setOnSucceeded(e -> {
            Course course = courseTask.getValue();
            courseCodeLbl.setText(course.getName());
        });
        exec.execute(courseTask);
    }
}
Nach dem Login kopieren

Durch die korrekte Implementierung des Threadings stellen Sie sicher, dass Langfristige Datenbankanforderungen blockieren den UI-Thread nicht, was zu einer reaktionsfähigen Benutzeroberfläche führt.

Das obige ist der detaillierte Inhalt vonWie implementiert man Threading für Datenbankanforderungen in JavaFX ordnungsgemäß, um eine Blockierung der Benutzeroberfläche zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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