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.fxmlFXDemo.kt
実行結果
初期表示実行中
停止状態
完了
2020-09-26 00:00
nice!(0)
コメント(0)
コメント 0