Как открыть любой мастер eclipse с начальной страницы в разработке плагина eclipse

Я использую файл HTML для своей приветственной страницы. Я хочу открыть Eclipse Wizard со стартовой страницы, используя

href="http://org.eclipse.ui.intro/runAction?pluginId=MobileTalk&class=mobiletalk.intro.ShowPerspectiveIntroAction"

В классе ShowPerspectiveIntroAction мой код выглядит следующим образом:

Class c = Class.forName("tttt.ddt.plugin.project.NewTtttProjectWizard");
Wizard wizard = (Wizard) c.newInstance();
WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),wizard);
dialog.open();

Но получаю ошибку: classnotfound:tttt.ddt.plugin.project.NewTtttProjectWizard

как я могу правильно открыть любой мастер Eclipse с начальной страницы?


person user1799630    schedule 05.11.2012    source источник


Ответы (1)


Глядя на ваш код, я подозреваю, что это проблема с загрузчиком классов. Использование Class.forName не является безопасной практикой в ​​Eclipse/OSGI, потому что каждый подключаемый модуль/пакет использует свой собственный загрузчик классов, и в результате часто возникают исключения Class Not Found Exceptions. Лучший подход — получить Bundle/Plugin, содержащий класс мастера, выполнив следующие действия: Platform.getBundle("com.stackoverflow.myplugindId"), который возвращает экземпляр Bundle. Затем в экземпляре пакета вызовите .loadClass("tttt.ddt.plugin.project.NewTtttProjectWizard"), который будет использовать правильный загрузчик классов, а затем, когда у вас есть экземпляр класса, вы можете вызвать метод newInstance(), который будет решить проблему с классом, не найденным. Надеюсь, это поможет, загрузка классов более сложна в среде OSGI, потому что каждый плагин имеет свой собственный загрузчик классов из соображений безопасности, поэтому я не советую использовать Class.forName в вашем коде. - Дункан

person Duncan Krebs    schedule 05.11.2012
comment
Благодарность! это работает, но после того, как я создаю новый проект в соответствии с мастером eclipse, я нажимаю «Готово», мастер не закрывается. когда я использую мастер eclipse для создания проекта в самом плагине, он работает хорошо. вот исключение: !ENTRY org.eclipse.ui 4 0 2012-11-06 11:10:20.701 !MESSAGE Необработанное исключение цикла обработки событий !STACK 0 java.lang.NullPointerException at tttt.ddt.plugin.project.NewTtttProjectWizard.performFinish (НьюТттПрожектВизард.java:130) - person user1799630; 06.11.2012
comment
код: getWorkbench().getWorkingSetManager().addToWorkingSets(proj, workingSets); // строка 130 @Дункан Кребс - person user1799630; 06.11.2012
comment
Это звучит как другой вопрос. Не уверен, что ваш мастер расширяет возможности мастера NewProject. Я бы предложил добавить точку останова для NPE и посмотреть, что является нулевым, и перейти оттуда. Либо остановитесь на NPE, либо на первой строке в PerformFinish() вашего мастера. - Дункан - person Duncan Krebs; 06.11.2012