【发布时间】: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 从外部程序获取数据。