Я реализовал мастер для моего плагина Eclipse, показывая несколько страниц.Одна из этих страниц требует некоторой длительной инициализации, то есть она состоит из таблицы SWT, которая должна быть заполнена информацией, поступающей из внешнего источника.Этот источник необходимо сначала активировать (один единственный вызов метода, который возвращается через пару секунд - я не могу заранее знать, сколько именно времени это займет), прежде чем его можно будет использовать в качестве входных данных для средства просмотра таблиц.Эта инициализация в настоящее время выполняется поставщиком модели таблицы, когда ему необходимо получить доступ к внешнему источнику в первый раз.
Поэтому, когда я вхожу на страницу мастера, я хотел бы показать фиктивную шкалу прогресса, которая просто считаетна некоторое время.Мой подход заключался в следующем, но, к сожалению, он не работает вообще:
private void initViewer() {
IRunnableWithProgress runnable = new IRunnableWithProgress() { // needed to embed long running operation into the wizard page
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
SubMonitor progress = SubMonitor.convert(monitor);
Thread thread = new Thread() {
@Override
public void run() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
viewer.setInput(ResourcesPlugin.getWorkspace().getRoot()); // this will make the table provider initialize the external source.
}
});
}
};
thread.start();
while(thread.isAlive()) {
progress.setWorkRemaining(10000);
progress.worked(1);
}
progress.done();
}
};
try {
getContainer().run(false, false, runnable);
} catch(Exception e) {
throw new Exception("Could not access data store", e);
}
}
Этот метод затем вызывается при вызове метода setVisible () - страницы мастера и должен через несколько секунд установитьвклад зрителя.Это, однако, никогда не происходит, потому что самый внутренний метод run () никогда не выполняется.
Любые подсказки о том, как обращаться с долгосрочными (где точная оценка недоступна) инициализациями в мастерах Eclipseбыл бы очень признателен!