私はサーバーからN要素をダウンロードするJavaプログラムを構築しています。私は、 "既にダウンロードされた要素"/Nのパーセンテージを示す作業進行状況バーを持っています。今は、GUIオブジェクトへの参照をスレッドに渡すことでプログレスバーの値を更新しますが、コードは「醜い」(GUIクラスはGUI自体への参照を含むスレッドを作成し、ループの種類を作成します)。 より良い方法がありますか?ワーカースレッドからプログレスバーを更新する
3
A
答えて
5
SwingWorker
は、この文脈では、このexampleで示唆されているようにいくつかの利点があります。
2
JProgressBar APIを読み、実際の例として進捗バーを使用する方法のSwingチュートリアルへのリンクに従ってください。
2
"ループ"を削除するためです。 GUIが拡張して作業スレッドに渡されるインタフェースを作成します。
0
ここで使用できるデザインパターンの1つはリスナーパターンです。進捗リスナーをワーカースレッドに登録します。リスナーは、GUI(または進行中に興味のあるもの)に投稿する役割を担います。
このような状況では、複数のリスナーを持つ可能性は非常に低いため、1つのリスナーだけを持つ方が(複雑さとオーバーヘッドが少なくなります)。
私のアプリでは、長時間実行される操作は、ProgressTracker(パーセントとステータステキストの2つのイベントタイプがあります)を渡すことによって呼び出されます。この情報は、JProgressBar、JLabelなどの更新に使用されます... ProgressTrackerを使用して、操作をキャンセルする必要があるかどうかを確認します。
SwingWorkerには、複数の更新をマージするのに役立つコードがいくつかありますが、長時間実行されるタスクはSwingWorkerから継承することを前提に構築されているため、懸念の分離には役立ちません。どちらの方向に向かうのかはあなた次第です.GUIとは何の関係も持たないため、自分のデータの操作を個人的に好みます。
はupvoteだろ
関連する問題
- 1. URLからプログレスバーを更新するExtJS
- 2. ワーカースレッドの完了後にメインスレッドからTkinterウィジェットを更新する
- 3. UIスレッドを更新するワーカースレッドのCountdownTimer
- 4. ASP.NET AJAXプログレスバー:コードからの更新?
- 5. プログレスバーの値を別のスレッドから更新しますか?
- 6. グライドでプログレスバーを更新
- 7. iOS 5のプログレスバーを更新する
- 8. 処理中にプログレスバーを更新する
- 9. JavaScriptでプログレスバーを更新する
- 10. スレッドのプログレスバーを更新する
- 11. ネットワークコール中にプログレスバーを更新する
- 12. ステータスバー内のプログレスバーを更新する
- 13. 異なるクラスから得られた値からプログレスバーを更新
- 14. ダイアログフォームのWPF更新プログレスバー
- 15. WPF:Parallel.Foreachのプログレスバーの更新
- 16. ASP.NETのワーカースレッドからlabel.text値を変更するには
- 17. インポートされたコードからのTkinter更新プログレスバー
- 18. ワーカースレッドからQt ::シグナルを送信すると、デフォルトでメインスレッドがUIを更新しますか?
- 19. Winformsプログレスバーが更新されない(C#)
- 20. Xamarinフォーム:プログレスバーとその更新
- 21. javaFXでプログレスバーが更新されない
- 22. プログレスバーが更新されません
- 23. iOS ObjectiveバックグラウンドでのCプログレスバーの更新
- 24. C#を使用したC++からのC++プログレスバーの更新管理されたC++を使用した更新
- 25. ワーカースレッドがMotorola V3のUIを更新できない
- 26. JavaScriptを使用してプログレスバーを更新する
- 27. 式を書式化してプログレスバーを更新する方法
- 28. Cocoa:プログレスバーのみ最後から2番目の値に更新します
- 29. QTマルチスレッドデータがメインスレッドからワーカースレッドに渡る
- 30. GridViewのプログレスバーを正しく更新する方法は?
)SwingUtilities.invokeLaterをを(使用しEDT上の任意のSwingコンポーネントに、あなたの更新情報を投稿してください。リンクが必要です。 –
@pst、リンクはAPIにあります。参照のためにAPIに簡単にアクセスできない場合は、プログラムすることはできません。 – camickr