Недавно я портировал все перспективы и виды с RCP 3 на RCP 4. Теперь я хотел бы переключаться между перспективами в своем приложении RCP 4.
После первого изменения перспективы на перспективу.
!MESSAGE Perspective with name 'perspective_label' and id 'PerspectiveName' has been made into a local copy
Для переключения перспективы я использую это
@Inject
private static MApplication app;
@Inject
private static EPartService partService;
@Inject
private static EModelService modelService;
@Inject
private static MWindow window;
private static void switchPerspective(final String id)
{
final Optional<MPerspective> perspective = PerspectiveSwitcherToolbar.findPerspective(id);
if(perspective.isPresent())
{
partService.switchPerspective(perspective.get());
}
else
{
System.out.println("Perspective not found");
}
}
private static Optional<MPerspective> findPerspective(final String perspectiveId)
{
final MUIElement element = modelService.find(perspectiveId, app);
if(element instanceof MPerspective)
{
perspectiveIdsToElement.put(perspectiveId, (MPerspective) element);
return Optional.of((MPerspective)element);
}
System.out.println("Wrong type " + element);
return Optional.empty();
}
При первом вызове для переключения перспективыменяется правильно.На второй звонок findPerspective
возвращает empty()
.
Я нашел этот вопрос, который, кажется, примерно такой же, но не решает проблему.
Открыть перспективу программно
Что может быть причиной этого?