编程语言
首页 > 编程语言> > java-jgoodies绑定合并频繁的更改

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