SSブログ

JavaFXの非同期処理 [JavaFX]

前置き

前回メモした通り、Progress系のコントロールで進捗状況を逐次確認したい時は、非同期で進捗度合いを更新する必要がある。
JavaFXでは非同期処理用に、javafx.concurrent.Taskクラスが用意されている。 Taskクラスのcallメソッドに、時間が掛かる処理を実装しておき、別スレッドでそのTaskを呼び出す流れ。

Taskクラスには、updateProgressメソッドが用意されており、簡単に進捗度を更新できるようになっている。
これにより、Progressコントロールに非同期処理を実装したTaskクラスをバインドすることで、 進捗度合いをリアルタイムでモニタできるようになっている。
Taskクラスは他にも、cancelledメソッドやsucceededメソッドなど、非同期処理を制御するためのメソッドが用意されている。
SwingのSwingWorkerと使い方はほとんど同じだが、処理状況、進捗度合い、処理結果などを保持できるあたりが優秀。

画面設計

  • 初期表示
    • 全てのバーとインジケータを初期化
  • 実行中(Start・Restartボタン)
    • 第1インジケータを不確定モードにする
    • 第2バーを不確定モードにする
    • 非同期処理を開始 or 再開する
    • 他のバーとインジケータで進捗度をモニタする
    • Start・Restartボタンを非活性にする
  • 停止状態(Stopボタン)
    • 非同期処理を中断する
    • 全てのバーとインジケータに停止時の進捗度を表示する
    • 実行中はStartボタンのテキストをRestartに変更する
    • Restartボタンを活性化する
  • 完了
    • 全てのバーとインジケータの状態を完了にする
    • RestartボタンのテキストをStartに変更する

実装

FXDemo.fxml


FXDemo.kt

実行結果

初期表示
task1.png

実行中
task2.png

停止状態
task3.png

完了
task4.png


nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。