使用執行緒執行資料庫請求
在 JavaFX 中,遵循特定的執行緒規則以確保 UI 回應能力和一致性至關重要。這涉及在後台執行緒上執行長時間運行的任務,例如資料庫請求,以及更新 JavaFX 應用程式執行緒上的 UI。
執行緒規則:
IllegalStateException 問題:
您遇到的 IllegalStateException 是因為您嘗試從後台更新 courseCodeLbl 標籤執行緒,違反規則 1。
正確實作:
要正確實作線程,請按照下列步驟操作:
使用 javafx.concurrent API:
JavaFX 提供 javafx.concurrent API 來簡化並發程式設計和 UI 管理。 Task 類別是此 API 的核心,提供後台處理和更新 UI 的機制。
範例程式碼:
這裡是一個範例Controller 類,示範了正確的使用執行緒和Task 類別:
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(); } }
此程式碼將資料庫請求封裝在一個Task 中,該任務處理執行查詢和更新JavaFX 應用程式執行緒上的UI。透過遵守 JavaFX 執行緒規則並使用 API,您可以有效率地執行資料庫請求,同時保持 UI 回應能力。
以上是在 JavaFX 中使用執行緒進行資料庫請求時如何避免「IllegalStateException」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!