首先看一下異常:
java.lang.InstantiationException: com.ibm.msdk.ui.session.view.actions.SImportAction
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at com.ibm.msdk.ui.session.view.actions.SViewActionProvider.makeImportAction(SViewActionProvider.java:157)
at com.ibm.msdk.ui.session.view.actions.SViewActionProvider.makeActions(SViewActionProvider.java:67)
at com.ibm.msdk.ui.session.view.SessionView.createPartControl(SessionView.java:446)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:367)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:226)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
at org.eclipse.ui.internal.WorkbenchPage$ActivationList.setActive(WorkbenchPage.java:4212)
at org.eclipse.ui.internal.WorkbenchPage$18.runWithException(WorkbenchPage.java:3271)
at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
=========================================================
對於以上異常,是說明在執行個體化對象失敗的時候拋出異常,這種異常多會出現在抽象類別中,在使用反射的機制時,由於抽象父類中的構造方法不是public的,所以導致異常的出現,其實很簡單,只要將需要反射的類中的相應構造方法改為public即可。
通常在
rap或者rcp的開發中,使用了fragment機制的時候就需要使用反射,常用於action等操作,需要注意的是org.eclipse.jface.action.Action 中的所有構造方法是私人的,如果在繼承的時候也未聲明public ,那麼使用反射 Class.forName("com.andy.MyAction")
.newInstance();
將無法調用MyAction中的無參數構造方法
public class MyAction extends org.eclipse.jface.action.Action{
public
MyAction(){} <----修改後---
protected
Action(){}
}