Eclipse - Реализация и увеличение индикатора выполнения SWT на панели инструментов
Я работаю над приложением для анализа данных из дерева каталогов, и при этом на нижней панели инструментов отображается монитор прогресса. Я использую java Files.walk() для обхода структуры и пытаюсь использовать IEventBroker, чтобы отправить сообщение на панель инструментов, чтобы увеличить индикатор выполнения, но мне кажется, что он мне не подходит. Кто-нибудь знает лучший подход к этому?
Это код, с которого начинается поиск и транслируются события.
Path file = Paths.get(directoryPath);
if (!file.toFile().exists())
{
return null;
}
_broker.send(Constants.INITIALISE_PROGRESS_BAR, file.toFile().list().length);
try (final Stream<Path> pathStream = Files.walk(file))
{
pathStream.forEach(path ->
{
_broker.send(Constants.INCREMENT_PROGRESS_BAR, "inc");
........
});
}
В моем разделе панели инструментов у меня есть следующие методы, чтобы инициализировать максимальный размер прогресса и для увеличения, когда они получают событие.
@Inject
@Optional
private void initialiseProgressBar(@UIEventTopic(Constants.INITIALISE_PROGRESS_BAR) Integer max)
{
_progressBar.setMinimum(0);
_progressBar.setMaximum(max);
}
@Inject
@Optional
private void incrementProgressBar(@UIEventTopic(Constants.INCREMENT_PROGRESS_BAR) String path)
{
incrementProgressBar();
}
private void incrementProgressBar()
{
_progressBar.setSelection(_progressBar.getSelection() + 1);
}
Поскольку я не знаю размера файловой структуры, лучше не увеличивать, а просто постоянно прогрессировать.
1 ответ
Один из способов (в дополнение к тому, что предложил @greg-449) - изменить способ запуска событий init/refresh следующим образом.
@Inject
private UISynchronize sync;
...
sync.asyncExec(new Runnable() {
@Override
public void run() {
_broker.send(Constants.INCREMENT_PROGRESS_BAR, "inc");
}
});