【问题标题】:JavaFX - Fast changing data, GUI update too slowJavaFX - 快速变化的数据,GUI 更新太慢
【发布时间】:2013-12-04 18:08:38
【问题描述】:

我有一个程序可以在外部计算机上进行某种计算。该程序发送有关其进度的信息,然后显示在 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 速度不够快,也不会显示值的每一个变化,这也是一个很好的解决方案。即,如果在 Platform.runLater() 的队列中有 Runnable 用于步骤 200,但 receiveData() 接收到 201 的值,则不需要显示 200 的值,因为它已经过时了。

【问题讨论】:

  • 当您收到新数据时,可能会删除队列中的所有 Runnables?
  • 可能对文本使用绑定的属性,绕过runLater。
  • 无法删除可运行文件,因为我无权访问该列表。此外,其他线程也可以在我不想删除的 GUI 上执行更改。
  • 我不认为边界是可能的。我通过 JSON 从外部程序获取数据。

标签: java javafx


【解决方案1】:

您可以应用节流技术 - 将您的消息放入队列中,每 300 毫秒选择最新的或聚合/平均值。这将避免 UI 的太多计划运行和更新。

此方法存在于 RX* 框架中,即在 RxJS 中,但似乎在 RxJava 中尚不可用。

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 2014-12-20
    • 2016-11-15
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多