java-jgoodies绑定合并频繁的更改
作者:互联网
我有一个Java应用程序,它以可变的速率更新数据(从控制之外的相当高速的数据流中接收数据,但最高可达120Kbytes / sec),并且我想显示统计信息,例如接收到的字节数/数据包数,使用对话框.
我正在研究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;
>将4个字段绑定到我的GUI中的元素
>可以在我的主应用程序线程中以所需的任何速度调用stats.update(),其中对“ update”的调用是触发GUI的更改侦听器的原因
>让GUI以我可以指定的较低速率“自动”更新,大约5-20Hz,因此不会因触发事件的滴答声而淹没.
是否有适当的机制可以让我做自己想做的事情?我正在查看JGoodies DelayedReadValueModel,但我真的不知道如何使用它.
如果我必须自己手动执行此操作,我想我可能会做的是:
>具有统计信息的镜像副本,并添加某种更新标志,以及从原始副本到镜像副本的链接,以及计时器超时
>在调用update()方法时,设置更新标志,然后调用诸如maybyPropagate()之类的方法
>也许Propagate():如果定时器超时正在进行中,或者到镜像副本的链接为空,则它什么都不做;否则,它将启动超时并将更新的数据发送到镜像副本,并清除更新标志
>计时器超时到期时,如果设置了更新标志并且到镜像副本的链接为非空,它将把更新的数据发送到镜像副本并清除更新标志
>实现了前面的4个元素之后,我的镜像副本具有更新的最大速率,因此,我可以使用常规的JGoodies BeanAdapter将GUI元素绑定到镜像副本的字段.
有什么建议么?
解决方法:
尽管JGoodies Binding通过Delayed *类解决了此问题,但是您可以考虑使用具有标准Swing功能的方法.
如果使用SwingWorker,则可以在后台发布元素并在EDT中对其进行处理. SwingWorker流程将获取已发布的数据块,并减少EDT更改的次数.
标签:binding,jgoodies,java 来源: https://codeday.me/bug/20191107/2004266.html