2012-07-05 38 views
0

我使用「Eclipse E4應用程序項目」嚮導創建了一個插件,然後使用模型片段添加了第二個插件,該模型片段爲E4應用程序的一個PartStack提供了一個Part。Eclipse E4模型片段LazyStackRenderer NullPointerException重啓時

爲此,我關注了http://www.vogella.com/articles/Eclipse4Modularity/article.html :在原始Application.e4xmi中設置PartStack的ID,然後定義將Part添加到PartStack的fragment.xmi。當爲首次執行,或(通過添加「-clearPersistedState」的程序參數)與新的工作區執行

一切工作正常。 但開始與包含持久workbench.xmi現有工作空間應用程序時,有這樣的錯誤消息:

!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.e4.ui.workbench.swt". 
java.lang.NullPointerException 
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.showTab(LazyStackRenderer.java:156) 
at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1024) 
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:98) 
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:639) 
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:725) 
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:696) 
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:690) 
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:675) 

調試成LazyStackRenderer.java:156指示的getParent()調用返回null。

這個問題似乎從重新加載持久workbench.xmi,其中包括本節始發(XML低於等去除):

...children xsi:type="basic:PartStack" xmi:id="..." elementId="demo.app.mainstack" contributorURI="platform:/plugin/E4DemoApp" selectedElement="_MG5SoMbxEeGKj8gOLKAMgw" 
....children xsi:type="basic:Part" xmi:id="_MG5SoMbxEeGKj8gOLKAMgw" elementId="demo.app.added_part" contributorURI="..." contributionURI="bundleclass://..." label="Added Part" 

注意,所述PartStack點的「selectedElement」到其單身兒童入境。當該模型在E4Application.loadApplicationModel()「該app的」在裝載有看起來像這樣:

Window->Perspective->...->PartStackImpl->PartImpl 

的PartImpl.eContainer指回PartStackImpl。好。

PartStackImpl.selectedElement應該反過來引用單個封閉的PartImpl。相反,它指的是不同的 PartImpl,具有正確elementId,contributorURI和contributionURI的對象,但對於eContainer爲null。

持久的workbench.xmi元素因此被加載成功,但selectedElement指針指向實際模型元素的不完整副本。稍後,LazyStackRenderer將使用對父級(eContainer)爲null的不完整「selectedElement」副本,並引發NullPointerException。

任何想法如何解決這個問題或解決它? 這是針對RCP和RAP的Eclipse 4.2。

+0

這與Eclipse錯誤相匹配https://bugs.eclipse.org/bugs/show_bug.cgi?id=382184 – Kay 2012-07-08 20:08:27

+0

可能必須等待Eclipse Juno SR1。 – Kay 2012-07-08 20:22:06

回答

0

Eclipse - 開普勒。

我,我去

...... \。metadata.plugins \ org.eclipse.e4.workbench文件夾locaiton。

和刪除的

workbench.xmi

所有內容並重新啓動應用程序。

爲我工作,希望能爲我工作。