我有一个Java应用程序,它以可变的速率更新数据(从控制之外的相当高速的数据流中接收数据,但最高可达120Kbytes / sec),并且我想显示统计信息,例如接收到的字节数/数据包数,使用对话框。
我正在研究JGoodies bindings,并初步处理了低速率接收到的人工数据。
我想做的大致是:
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;
stats.update()
,其中对“update”的调用是触发GUI的更改侦听器的方式是否有适当的机制可以让我做自己想做的事情?我正在查看JGoodies DelayedReadValueModel,但我真的不知道如何使用它。
如果我必须自己手动执行此操作,我想我可能会做的是:
update()
方法时的maybePropagate()
的方法maybePropagate()
:如果计时器超时正在进行,或者到镜像副本的链接为空,则不执行任何操作;否则,它将启动超时并将更新的数据发送到镜像副本,并清除更新标志有什么建议?
最佳答案
尽管JGoodies Binding通过Delayed *类解决了此问题,但是您可以考虑使用具有标准Swing功能的方法。
如果使用SwingWorker,则可以在后台发布元素并在EDT中对其进行处理。 SwingWorker进程将获取已发布的数据块,并减少EDT更改的次数。
关于java - jgoodies绑定(bind)+合并频繁更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/634798/