Eclipse - 在工具栏中实现和增加swt进度条

时间:2017-08-22 07:38:51

标签: java swt eclipse-rcp jface e4

我正在处理一个应用程序来解析目录树中的数据,同时这样做会在底部工具栏中显示进度监视器。我使用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 个答案:

答案 0 :(得分:0)

一种方法(除了提议的@ greg-449之外)是改变你发射这样的init / refresh事件的方式

@Inject
private UISynchronize       sync;
...
sync.asyncExec(new Runnable() {
  @Override
  public void run() {
    _broker.send(Constants.INCREMENT_PROGRESS_BAR, "inc");            
  }
});