#java #swt #swtchart
#java #swt #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);
Но, похоже, он обновляется только один раз в конце цикла. Есть ли лучшая практика, которой я должен следовать при необходимости быстрого обновления диаграммы?
Ответ №1:
Этот код выполняется в потоке пользовательского интерфейса и будет блокировать обновления пользовательского интерфейса, пока вы не вернетесь к основному Display.readAndDispatch
циклу. Код в основном потоке пользовательского интерфейса должен выполняться быстро и возвращаться к основному циклу как можно скорее. Пользовательский интерфейс обновляется только при readAndDispatch
выполнении.
Таким образом, вы не можете использовать простой for
цикл в потоке пользовательского интерфейса для обновления диаграммы.
Один из способов сделать это — использовать Display.timerExec
для выполнения одного шага после задержки.
Или вы можете запустить фоновый поток и поместить туда свой цикл. Из фонового потока вы должны вызвать Display.syncExec
для запуска код, который обновляет пользовательский интерфейс.