JavaFX - 数据快速变化,GUI 更新太慢

标签 java javafx

我有一个程序可以在外部计算机上进行某种计算。该程序发送有关其进度的信息,然后显示在 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/

相关文章:

JavaFX - Gridpane 日益增长的问题

java - 你能连接到一个无接口(interface)的 jar 吗?

java - 如何从 AnimationTimer 对象获取特定字段?

java - 如何在javafx中设置头像的边框颜色

javafx - 如何在JavaFX TitledPane中设置/删除插图

java - HttpClient 类型的 getStatusLine() 方法未定义

Java 字符串拆分正则表达式无法按预期工作

java - 处理大量 HTTP JSON 响应的最佳方法

java - 使用 JUnit 测试 Spring Controller

javafx - CSV 到 TableView 跳过标题 (JavaFX)