可変レートでデータを更新する Java アプリがあります (かなり高速なデータ ストリームから受信され、制御不能ですが、最大 120K バイト/秒)、受信したバイト数/パケット数などの統計を表示したいと考えています。 、ダイアログ ボックスを使用します。
私はJGoodies バインディングを調べており、低レートで受信した人工データで予備的に機能するものを手に入れました。
私がやりたいことは、大まかに次のとおりです。
Bean クラスを次のようにします。
public class Statistics { private int bytes; private int goodPackets; private int badPackets; private int totalPackets; public int getBytes() { return bytes; } public int getGoodPackets() { return goodPackets; } public int getBadPackets() { return badPackets; } public int getTotalPackets() { return totalPackets; } public void update(/* TBD */) { /* updates the fields appropriately */ } public Statistics() { bytes=goodPackets=badPackets=totalPackets=0; } } Statistics stats;
私のGUIの要素に4つのフィールドをバインドします
stats.update()
メインアプリケーションスレッドで必要な速度で呼び出すことができます。「更新」への呼び出しがGUIの変更リスナーをトリガーするものです- GUI を指定できる低いレート (約 5 ~ 20 Hz) で「自動的に」更新するので、トリガーされたイベントの塊に圧倒されません。
私がやりたいことをさせてくれる適切なメカニズムはありますか?JGoodies DelayedReadValueModel を見ていますが、使い方がよくわかりません。
自分で手動で行う必要がある場合、おそらく次のことを行うと思います。
- Statistics のミラーリングされたコピーを持ち、ある種の更新フラグ、オリジナルからミラーリングされたコピーへのリンク、およびタイマーのタイムアウトを追加します。
- メソッドが
update()
呼び出されたら、更新フラグを設定し、次のようなメソッドを呼び出しますmaybePropagate()
maybePropagate()
: タイマーのタイムアウトが進行中の場合、またはミラーリングされたコピーへのリンクが null の場合、何もしません。それ以外の場合は、タイムアウトを開始し、更新されたデータをミラー コピーに送信し、更新フラグをクリアします。- タイマーのタイムアウトが切れたときに、更新フラグが設定されていて、ミラーリングされたコピーへのリンクが null でない場合、更新されたデータをミラーリングされたコピーに送信し、更新フラグをクリアします。
- 前の 4 つの要素を実装すると、ミラー コピーの更新速度が最大になるため、通常の JGoodies BeanAdapter を使用してミラー コピーのフィールドに GUI 要素をバインドするだけで済みます。
助言がありますか?