Heim > Datenbank > MySQL-Tutorial > Wie gehe ich mit Threading in JavaFX-Anwendungen richtig um?

Wie gehe ich mit Threading in JavaFX-Anwendungen richtig um?

Linda Hamilton
Freigeben: 2024-12-20 19:19:19
Original
205 Leute haben es durchsucht

How to Handle Threading Correctly in JavaFX Applications?

Threading in JavaFX verstehen

JavaFX legt zwei wesentliche Regeln für Threading fest:

Regel 1 (GUI-Threading ):
Jede Interaktion mit einem Knoten in einem JavaFX-Szenendiagramm muss auf der erfolgen JavaFX-Anwendungsthread. Dieser Thread ist sowohl für das Rendern als auch für die Verarbeitung von Benutzerereignissen verantwortlich.

Regel 2 (Hintergrund-Threading):
Vorgänge mit langer Laufzeit sollten in einem Hintergrund-Thread ausgeführt werden, um zu verhindern, dass die Benutzeroberfläche nicht reagiert.

Threading mit javafx.concurrent API

JavaFX bietet eine Task-Klasse zur Verwaltung von Hintergrundvorgängen. Aufgaben verfügen über eine call()-Methode, die in einem separaten Thread ausgeführt wird. Nach Abschluss können Aufgaben UI-Elemente mithilfe ihrer Ereignishandler succeeded() und failed() aktualisieren. Diese Handler werden im FX-Anwendungsthread aufgerufen und stellen die Einhaltung von Regel 1 sicher.

Beispiel: Datenbankzugriff mit Threading

Nehmen wir Ihr Beispiel einer Datenbankabfrage und implementieren es es mittels Threading.

Data Access Object (DAO) Klasse:

public class CourseDAO {

    private Connection conn;

    public CourseDAO() throws Exception {
        // Establish database connection
    }

    public Course getCourseByCode(int code) throws SQLException {
        try (PreparedStatement stmt = conn.prepareStatement("SELECT * FROM course WHERE c_code = ?")) {
            stmt.setInt(1, code);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                // Create and populate a Course object
            } else {
                // Handle case where course doesn't exist
            }
        }
    }
}
Nach dem Login kopieren

Controller-Klasse:

@FXML
private TextField courseId;
@FXML
private Label courseCodeLbl;

private CourseDAO courseDAO;

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

    courseTask.setOnSucceeded(e -> {
        Course course = courseTask.getValue();
        if (course != null) {
            courseCodeLbl.setText(course.getName());
        }
    });

    // Execute the task on a background thread
    exec.execute(courseTask);
}
Nach dem Login kopieren

In diesem Beispiel wird die Datenbankabfrage in einem separaten Thread gemäß Regel 2 ausgeführt. Nach Abschluss wird die Benutzeroberfläche im FX-Anwendungsthread gemäß Regel 1 aktualisiert.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Threading in JavaFX-Anwendungen richtig um?. 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