Я создал следующий класс StatisticsView для пользовательского представления для моего плагина Eclipse:
public class StatisticsView extends ViewPart {
public StyledText projectname;
public void createPartControl(Composite parent) {
GridLayout layout = new GridLayout(3, false);
parent.setLayout(layout);
//Project Name
Label projectnameLabel = new Label(parent, SWT.NONE);
projectnameLabel.setText("Project name: ");
projectname = new StyledText(parent, SWT.NONE);
projectname.setText("Anything for now");
.
.
}
.
.
public String getProjectName() {
return projectname.getText();
}
public void updateData(Stats statistics) {
projectname.setText(statistics.getProjectName()); //causes the error
.
.
}
}
Файл plugin.xml имеет следующую точку зрения:
<extension
point="org.eclipse.ui.views">
<category
name="XYZ"
id="XYZ">
</category>
<view
name="Statistics"
inject="true"
category="XYZ"
class="XYZ.view.StatisticsView"
id="XYZ.view.StatisticsView">
</view>
</extension>
Я запускаю проект с помощью "Запуск от имени приложения Eclipse", которое открывает новый экземпляр Eclipse (назовем его Inner Eclipse) и где отображается мое представление.
У меня есть в моем проекте (откуда я запускаю проект, то есть не внутреннее затмение) другой класс ResultsListener, в котором я пытаюсь найти это представление, используя его "id", например:
.....
IWorkbenchWindow workbenchWindow = null;
IWorkbenchWindow[] allWindows = PlatformUI.getWorkbench().getWorkbenchWindows();
for (IWorkbenchWindow window : allWindows) {
workbenchWindow = window;
if (workbenchWindow != null) {
System.out.println("Found workbench");
break;
}
}
IWorkbenchPage activePage = workbenchWindow.getActivePage();
IViewPart viewPart = activePage.findView("XYZ.view.StatisticsView");
if(viewPart==null) {
System.out.println("View Not found");
}
StatisticsView myView = (StatisticsView)viewPart;
System.out.println(myView.getProjectName()); //causes the error
myView.updateData(stat);
Всякий раз, когда я вызываю любой метод найденного представления, он дает мне следующую ошибку: org.eclipse.swt.SWTException: Invalid thread access
В моем классе ResultsListener мне нужно выполнить некоторый анализ, а затем обновить виджеты представления, которые затем должны быть отражены во внутреннем затмении. Любая помощь могла бы быть полезна