我正在处理一个应用程序来解析目录树中的数据,同时这样做会在底部工具栏中显示进度监视器。我使用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);
}
由于我不知道文件结构的大小,所以最好不要增加,而只是有一些持续的进展。
答案 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");
}
});