我有一个程序可以在外部计算机上进行某种计算。该程序发送有关其进度的信息,然后显示在 GUI 中。它的工作原理大致是这样的:
public void receiveData(final int step, final double errorRate)
{
Platform.runLater(new Runnable()
{
@Override
public void run()
{
stepLabel.setText(""+step);
errorLabel.setText(""+errorRate);
}
}
}
通过外部计算机上的系统输出,我可以看到该程序执行计算的速度非常快。另一方面,GUI 显示程序速度不够快。计算完成后,我仍然可以看到值发生变化,因为 Platform.runLater() 处的队列仍然包含具有更新的可运行对象。
如何加快更改速度?
如果 GUI 速度不够快,则无法显示值的每一个变化,这也是一个很好的解决方案。即,如果第 200 步的 Platform.runLater() 队列中有一个 Runnable,但 receiveData() 接收到 201 的值,则不需要显示 200 的值,因为它已经过时了。
最佳答案
您可以应用限制技术 - 将消息放入队列中,每 300 毫秒选择最新值或聚合/平均值。这将避免过多的计划运行和 UI 更新。
此方法存在于 RX* 框架中,即 RxJS 中,但似乎尚未在 RxJava 中可用。
关于JavaFX - 数据快速变化,GUI 更新太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20101198/