2012-11-05 74 views
0

我使用HTML文件作爲我的歡迎頁面。我想用如何在eclipse插件開發中從Intro頁面打開任何eclipse嚮導

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

在類ShowPerspectiveIntroAction從介紹頁面打開Eclipse的嚮導,我的代碼如下:

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嚮導?

回答

2

從看你的代碼我懷疑這是一個類加載器的問題。在Eclipse/OSGI中使用Class.forName不是安全的做法,因爲每個插件/軟件包都使用它們自己的類加載器,結果很多時候會發生類未發現異常。更好的方法是通過執行此操作來獲取包含嚮導類的Bundle/Plugin:Platform.getBundle(「com.stackoverflow.myplugindId」),它返回Bundle的一個實例。然後在bundle的實例上調用.loadClass(「tttt.ddt.plugin.project.NewTtttProjectWizard」),它將使用正確的類加載器,然後一旦有了Class的實例,就可以調用newInstance()方法,它將解決您的類未找到問題。希望有助於,類加載在OSGI環境中更加複雜,因爲出於安全原因,每個插件都有自己的類加載器,所以我建議不要在代碼中使用Class.forName。 - 鄧肯

+0

謝謝!它的工作原理,但根據eclipse嚮導創建一個新項目後,我點擊「完成」,嚮導不關閉。當我使用eclipse嚮導在插件本身中創建項目時,它運行良好。 這裏是例外: ENTRY org.eclipse.ui 4 0 2012年11月6日11:10:20.701 消息未處理的事件循環異常 STACK 0 顯示java.lang.NullPointerException \t在tttt.ddt! 。.plugin.project.NewTtttProjectWizard.performFinish(NewTtttProjectWizard.java:130) – user1799630

+0

的代碼是: getWorkbench()getWorkingSetManager()addToWorkingSets(PROJ, \t \t \t \t workingSets); // line 130 @Duncan Krebs – user1799630

+0

這聽起來像是一個不同的問題。不確定您的嚮導是否擴展了NewProject嚮導。我會建議爲NPE添加一個斷點,看看什麼是空的,然後從那裏開始。要麼停在NPE或在嚮導的performFinish()中的第一行。 - 鄧肯 –