私は可変レート(かなり高速のデータストリームから私のコントロールから受け取ったものの最大120Kバイト/秒)でデータを更新するJavaアプリを持っています。受信したバイト数/パケット数などの統計情報をダイアログボックスで表示します。jgoodies bindings +頻繁な変更を融合する
私はJGoodies bindingsを探していて、低速で受信した人工データを予備的に処理していました。私がやりたい何
は、大体、次のとおりです。
は、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-20Hz)で「自動的に」更新されるので、トリガされたイベントのゴブで圧倒されることはありません。
私にしたいことをさせる適切なメカニズムがありますか?私はJGoodies DelayedReadValueModelを見ていますが、実際に使用する方法はわかりません。
私は手動でそれを自分自身をしなければならなかった場合、私はおそらくであろうことを推測です:
- は、統計のミラーコピーを持っているし、更新フラグのいくつかの種類だけでなく、からのリンクを追加しますミラーリングされたコピー元の、およびタイマーのタイムアウト
update()
メソッドが呼び出され - は、更新フラグを設定し、
maybePropagate()
maybePropagate()
のようなメソッドを呼び出します。タイマーのタイムアウトが進行中である場合、またはへのリンクミラーリングされたコピーはnullですが、何もしません。それ以外の場合はタイムアウトを開始し、更新されたデータをミラーリングされたコピーに送信し、更新フラグ- をクリアします。タイマーのタイムアウトが満了すると、更新フラグが設定され、ミラーリングされたコピーへのリンクがnullでない場合、ミラーリングされたコピーにデータを更新し、更新フラグをクリアします
- 前の4つの要素を実装すると、ミラーリングされたコピーの最大レートが更新されるため、ミラーリングされたコピーのフィールドにGUI要素をバインドできます通常のJGoodies BeanAdapterです。
あなたはバイトのフィールドに値モデルをラップすることができ、更新を遅らせるために今
ValueModel bytesModel = statsPresentationModel.getModel("bytes");
label = BasicComponentFactory.createLabel(bytesModel);
:
+1 ...今私はそれを試してみる時間を見つけることができます:( –