スレッドを使用したデータベースリクエストの実行
JavaFX では、UI の応答性と一貫性を確保するために特定のスレッド ルールに従うことが重要です。これには、バックグラウンド スレッドでのデータベース リクエストなどの長時間実行タスクの実行と、JavaFX アプリケーション スレッドでの UI の更新が含まれます。
スレッド ルール:
IllegalStateException 問題:
発生した IllegalStateException は、バックグラウンド スレッドからの courseCodeLbl ラベル。ルール 1 に違反しています。
正しい実装:
スレッドを正しく実装するには、次の手順に従います:
javafx.concurrent API の使用:
JavaFX は、同時プログラミングと UI 管理を簡素化する javafx.concurrent API を提供します。 Task クラスは、この API の中心であり、バックグラウンド処理と UI の更新のためのメカニズムを提供します。
サンプル コード:
これは、正しい手順を示すコントローラー クラスの例です。スレッドと 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 中国語 Web サイトの他の関連記事を参照してください。