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");            
  }
});
Другие вопросы по тегам