我有一个程序在外部计算机上进行某种计算。该程序发送有关其进度的信息,然后在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()中的队列仍然包含带有更新的runnables。
如何加快变化?
如果GUI的值不够快,如果GUI没有显示值的每一个变化,那么也将是一个很好的解决方案。即,如果在步骤200的Platform.runLater()队列中有Runnable,但receiveData()收到201的值,则不需要显示200的值,因为它已经过时了。
答案 0 :(得分:2)
您可以应用限制技术 - 将您的消息放入队列,每300ms选择最新或聚合/平均值。这样可以避免为UI安排过多的计划运行和更新。
此方法存在于RX *框架中,即RxJS中,但似乎尚未在RxJava中可用。