2017-08-22 28 views
0

我正在处理一个应用程序以解析来自目录树的数据,同时在底部工具栏中显示进度监视器。我正在使用java Files.walk()来遍历结构,并尝试使用IEventBroker,向工具栏部分发送消息以增加进度条,但他似乎对我而言效果不佳。有谁知道更好的方法吗?Eclipse - 在工具栏中实现和增加一个swt进度条

这是搜索开始和事件广播的代码。

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"); 

      ........ 

     }); 

    } 

在我的工具栏部分,我有以下方法intialise进步的最大尺寸和增加时,他们收到的事件。

@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); 
} 

因为我不知道它可能是最好不要增加,而是文件结构的大小只是有某种continious进展。

+0

所以这是一个“E4” RCP的方式吗?对于e4 IEventBroker应该没问题,但你需要向我们展示一些代码。 –

+0

这是格雷格,我现在会在一秒后发布。 –

+0

那么这到底是什么问题呢? –

回答

0

的一种方式(除了什么建议@格雷格-449)是改变你在放的init /刷新这样的活动

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

我一直在尝试这与gregs答案,但我仍然有这个异步没有被调用的问题。它在文件解析完成后总是更新进度条。 –

+0

问:您之前在同一个班级或两个不同班级/实例中发布的代码是? – titou10

+0

两个分开的类。一个广播和其他简单的接收。 –