ホームページ > データベース > mysql チュートリアル > バックグラウンドデータベーススレッドからJavaFX UIを安全に更新するにはどうすればよいですか?

バックグラウンドデータベーススレッドからJavaFX UIを安全に更新するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-26 19:29:09
オリジナル
790 人が閲覧しました

How to Safely Update JavaFX UI from Background Database Threads?

スレッドを使用して JavaFX でデータベースリクエストを行う

JavaFX では、スレッドに関する 2 つの基本的なルールが規定されています。

  1. 任意シーン グラフ ノードの状態との対話は JavaFX アプリケーションで実行する必要があります
  2. 長時間の操作はバックグラウンド スレッドで実行する必要があります。

例外が発生しました

更新しようとしたときに発生した例外が発生しましたJavaFX アプリケーション以外のスレッドからの UI (courseCodeLbl.setText(...)) thread.

スレッド処理を正しく実装する

データベース リクエストが別のスレッドで実行されるようにするには、次の手順に従います。

  • ランナブルを作成する
  • インスタンスを渡すこのクラスの Thread コンストラクターに追加し、スレッドを開始します。
  • Platform.runLater(Runnable r) を使用して、データベースの結果で UI を更新します。

使用したスレッドの実装JavaFX.concurrent

JavaFX は、バックグラウンド スレッドの管理と更新のために特別に設計された Task クラスを提供します。 UI。

  • Task オブジェクトを作成し、call() メソッドでデータベース呼び出しを定義します。
  • updateProgress(...) と updateMessage(...) を使用して、実行中の UI。
  • 結果を処理して処理するための setOnSucceeded(...) および setOnFailed(...) ハンドラーを登録します。エラー。
  • Task.Executor (Executors.newCachedThreadPool など) を使用してタスクを呼び出します。

サンプル実装

Task<Course> courseTask = new Task<Course>() {
    @Override
    public Course call() throws Exception {
        return myDAO.getCourseByCode(courseCode);
    }
};
courseTask.setOnSucceeded(e -> {
    Course course = courseTask.getCourse();
    if (course != null) {
        courseCodeLbl.setText(course.getName());
    }
});
exec.execute(courseTask);
ログイン後にコピー

この例では、データベースへのアクセスはタスク内で実行され、 UI の更新は、setOnSucceeded ハンドラーを使用して JavaFX アプリケーション スレッドでスケジュールされます。これらのガイドラインに従うことで、JavaFX アプリケーションの UI の応答性を維持しながら、スレッドを効果的に使用してデータベース リクエストを最適化できます。

以上がバックグラウンドデータベーススレッドからJavaFX UIを安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート