在 JavaFX 中使用執行緒進行資料庫請求時如何避免「IllegalStateException」?
使用執行緒執行資料庫請求
在 JavaFX 中,遵循特定的執行緒規則以確保 UI 回應能力和一致性至關重要。這涉及在後台執行緒上執行長時間運行的任務,例如資料庫請求,以及更新 JavaFX 應用程式執行緒上的 UI。
執行緒規則:
- 規則1: 任何與場景圖狀態互動的程式碼都必須在JavaFX 應用程式上執行執行緒。
- 規則 2: 長時間運行的操作應在後台執行緒上執行。
IllegalStateException 問題:
您遇到的 IllegalStateException 是因為您嘗試從後台更新 courseCodeLbl 標籤執行緒,違反規則 1。
正確實作:
要正確實作線程,請按照下列步驟操作:
- 建立 Runnable 實作封裝資料庫要求。
- 使用 Platform.runLater() 方法安排 UI 更新JavaFX 應用程式執行緒。
使用 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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
