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