Using Threads to Execute Database Requests
In JavaFX, it's crucial to follow specific threading rules to ensure UI responsiveness and consistency. This involves executing long-running tasks, such as database requests, on background threads and updating the UI on the JavaFX application thread.
Threading Rules:
IllegalStateException Issue:
The IllegalStateException you encountered is because you're attempting to update the courseCodeLbl label from a background thread, violating Rule 1.
Correct Implementation:
To correctly implement threading, follow these steps:
Using javafx.concurrent API:
JavaFX provides the javafx.concurrent API to simplify concurrent programming and UI management. The Task class is central to this API, providing a mechanism for background processing and updating the UI.
Sample Code:
Here's an example Controller class that demonstrates the correct use of threading and the Task class:
import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class Controller { @FXML private Button getCourseBtn; @FXML private TextField courseId; @FXML private Label courseCodeLbl; private ModelController mController; public void getCourseNameOnClick() { Task<String> courseTask = new Task<>() { @Override protected String call() { String courseName = ""; Course c = new Course(); c.setCCode(Integer.valueOf(courseId.getText())); mController = new ModelController(c); try { ResultSet rs = mController.getResult(); if (rs.next()) { courseName = rs.getString(1); } } catch (Exception e) { throw new RuntimeException(e); } return courseName; } }; courseTask.setOnSucceeded(e -> Platform.runLater(() -> courseCodeLbl.setText(courseTask.getValue()))); new Thread(courseTask).start(); } }
This code encapsulates the database request in a Task, which handles running the query and updating the UI on the JavaFX application thread. By adhering to JavaFX threading rules and using the API, you can execute database requests efficiently while maintaining UI responsiveness.
The above is the detailed content of How to Avoid `IllegalStateException` When Using Threads for Database Requests in JavaFX?. For more information, please follow other related articles on the PHP Chinese website!