【发布时间】:2010-10-12 16:44:38
【问题描述】:
我有一个 Java 应用程序,它以可变速率更新数据(从我无法控制的相当高速的数据流接收,但最高 120Kbytes/sec),我想显示像字节数这样的统计数据/packets 收到,使用一个对话框。
我正在调查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(),其中对“更新”的调用是触发 GUI 更改侦听器的原因 - 让 GUI 以我可以指定的较低频率“自动”更新,大约 5-20Hz,这样它就不会被大量触发事件所淹没。
是否有适当的机制可以让我做我想做的事?我正在查看 JGoodies DelayedReadValueModel,但我真的不知道如何使用它。
如果我必须自己手动完成,我想我可能会做的是:
- 拥有统计信息的镜像副本,并添加某种更新标志,以及从原始副本到镜像副本的链接,以及计时器超时
- 调用
update()方法时,设置更新标志,调用类似maybePropagate()的方法 -
maybePropagate():如果定时器超时,或者镜像副本的链接为空,则什么都不做;否则启动超时并将更新的数据发送到镜像副本,并清除更新标志 - 定时器超时后,如果设置了更新标志且镜像副本的链接不为空,则将更新后的数据发送到镜像副本并清除更新标志
- 在实现了前 4 个元素后,我的镜像副本具有最大的更新速率,因此我可以使用常规 JGoodies BeanAdapter 将 GUI 元素绑定到镜像副本的字段。
有什么建议吗?
【问题讨论】: