我使用「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。
這與Eclipse錯誤相匹配https://bugs.eclipse.org/bugs/show_bug.cgi?id=382184 – Kay 2012-07-08 20:08:27
可能必須等待Eclipse Juno SR1。 – Kay 2012-07-08 20:22:06