SWTChart在循环内时不会重绘

问题描述

如果我有以下循环:

Chart plot = new Chart(composite,SWT.NONE);
ISeriesSet seriesSet = plot.getSeriesSet();
ISeries series = seriesSet.createSeries(SeriesType.LINE,"Test");

for(int i=0; i<1000; i++) {
    points = ...
    series.setYSeries(points);
}

即使我在循环中添加了延迟,图表刷新也没有足够快。我不得不最小化窗口,然后最大化它以查看更改,换句话说,每个循环之后它都不会刷新,我试图通过在循环内添加以下行来强制刷新:

plot.redraw();
plot.layout(true,true);

但是似乎它在循环结束时仅刷新一次。在必须快速刷新图表时,我应该遵循最佳实践吗?

解决方法

此代码在UI线程中运行,并且将阻止UI更新,直到您返回到主Display.readAndDispatch循环为止。主UI线程中的代码必须快速执行并尽快返回主循环。仅在执行readAndDispatch时更新UI。

因此,您不能在UI线程中使用简单的for循环来更新图表。

一种方法是在延迟后使用Display.timerExec运行单个步骤。

或者您可以启动一个后台线程并将循环放在此处。您必须从后台线程调用Display.syncExec来运行更新UI的代码。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...