2017-09-27 128 views
2

我在學習Nebula NatTable。我創建了一個RCP應用程序。在這部分,我編輯了這樣的@PostConstruct:在Eclipse RCP部件中創建NatTable對象時出現NullPointerException

@PostConstruct 
    public void createComposite(Composite parent) { 
     final NatTable natTable = new NatTable(parent, SWT.NO_BACKGROUND 
       | SWT.NO_REDRAW_RESIZE | SWT.DOUBLE_BUFFERED, false); 
    } 

但是,當運行應用程序。我得到了例外。你能清除我嗎?

更新:添加異常日誌:

java.lang.NullPointerException 
    at org.eclipse.nebula.widgets.nattable.viewport.ScrollBarScroller.addListener(ScrollBarScroller.java:36) 
    at org.eclipse.nebula.widgets.nattable.viewport.ScrollBarHandlerTemplate.<init>(ScrollBarHandlerTemplate.java:64) 
    at org.eclipse.nebula.widgets.nattable.viewport.HorizontalScrollBarHandler.<init>(HorizontalScrollBarHandler.java:34) 
    at org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer.doCommand(ViewportLayer.java:1010) 
    at org.eclipse.nebula.widgets.nattable.layer.AbstractIndexLayerTransform.doCommand(AbstractIndexLayerTransform.java:109) 
    at org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer.doCommandOnChildLayer(GridLayer.java:113) 
    at org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer.doCommandOnChildLayers(GridLayer.java:99) 
    at org.eclipse.nebula.widgets.nattable.layer.CompositeLayer.doCommand(CompositeLayer.java:151) 
    at org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer.doCommand(GridLayer.java:187) 
    at org.eclipse.nebula.widgets.nattable.NatTable.doCommand(NatTable.java:820) 
    at org.eclipse.nebula.widgets.nattable.NatTable$7.handleEvent(NatTable.java:475) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86) 
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4428) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1103) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1084) 
    at org.eclipse.swt.widgets.Control.WM_SIZE(Control.java:5511) 
    at org.eclipse.swt.widgets.Scrollable.WM_SIZE(Scrollable.java:367) 
    at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1763) 
    at org.eclipse.swt.widgets.Canvas.WM_SIZE(Canvas.java:492) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4918) 
    at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:359) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2555) 
    at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:88) 
    at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5743) 
    at org.eclipse.swt.widgets.Canvas.WM_WINDOWPOSCHANGED(Canvas.java:499) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4931) 
    at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:359) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.SetWindowPos(Native Method) 
    at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1482) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3304) 
    at org.eclipse.swt.widgets.Composite.setBoundsInPixels(Composite.java:1079) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3265) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3261) 
    at org.eclipse.swt.widgets.Control.setBounds(Control.java:3256) 
    at org.eclipse.swt.layout.FillLayout.layout(FillLayout.java:219) 
    at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1363) 
    at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1774) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4918) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2555) 
    at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:88) 
    at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5743) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4931) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.EndDeferWindowPos(Native Method) 
    at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:1007) 
    at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:973) 
    at org.eclipse.swt.widgets.Composite.setResizeChildren(Composite.java:1187) 
    at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1778) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4918) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2555) 
    at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:88) 
    at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5743) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4931) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.SetWindowPos(Native Method) 
    at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1482) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3304) 
    at org.eclipse.swt.widgets.Composite.setBoundsInPixels(Composite.java:1079) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3265) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3261) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3337) 
    at org.eclipse.swt.widgets.Control.setBounds(Control.java:3333) 
    at org.eclipse.e4.ui.workbench.renderers.swt.SashLayout.setRectangle(SashLayout.java:283) 
    at org.eclipse.e4.ui.workbench.renderers.swt.SashLayout.tileSubNodes(SashLayout.java:228) 
    at org.eclipse.e4.ui.workbench.renderers.swt.SashLayout.tileSubNodes(SashLayout.java:271) 
    at org.eclipse.e4.ui.workbench.renderers.swt.SashLayout.layout(SashLayout.java:145) 
    at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1363) 
    at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1774) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4918) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2555) 
    at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:88) 
    at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5743) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4931) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.SetWindowPos(Native Method) 
    at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1482) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3304) 
    at org.eclipse.swt.widgets.Composite.setBoundsInPixels(Composite.java:1079) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3265) 
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3261) 
    at org.eclipse.swt.widgets.Control.setBounds(Control.java:3256) 
    at org.eclipse.swt.layout.FillLayout.layout(FillLayout.java:204) 
    at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1363) 
    at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1774) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4918) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2555) 
    at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:88) 
    at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5743) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4931) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5178) 
    at org.eclipse.swt.internal.win32.OS.EndDeferWindowPos(Native Method) 
    at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:1007) 
    at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:973) 
    at org.eclipse.swt.widgets.Composite.setResizeChildren(Composite.java:1187) 
    at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1364) 
    at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1348) 
    at org.eclipse.swt.widgets.Composite.setLayoutDeferred(Composite.java:1147) 
    at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.forceLayout(WBWRenderer.java:941) 
    at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.postProcess(WBWRenderer.java:782) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:684) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1081) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1044) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153) 
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:162) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1499) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1472) 

更新:此代碼運行良好:

public class SamplePart { 

    @PostConstruct 
    public void createComposite(Composite parent) { 
     final NatTable natTable = new NatTable(parent, SWT.NO_BACKGROUND 
       | SWT.NO_REDRAW_RESIZE | SWT.DOUBLE_BUFFERED, false); 
     final DataLayer bodyDataLayer = new DataLayer(new IDataProvider() { 

      @Override 
      public void setDataValue(int columnIndex, int rowIndex, Object newValue) { } 

      @Override 
      public int getRowCount() { return 0; } 

      @Override 
      public Object getDataValue(int columnIndex, int rowIndex) { return null; } 

      @Override 
      public int getColumnCount() { return 0; } 
     }); 
     natTable.setLayer(bodyDataLayer); 
    } 
} 

更新:解決方法:不使用樣式Dirk Fauth說:

final NatTable natTable = new NatTable(parent, false); 

回答

3

簡短的回答是,因爲你做錯了。請閱讀我們的Getting Started Tutorial以瞭解如何使用NatTable。

有在你的代碼至少3個錯誤:

  1. 你是不是提供了一個層來使用,這會導致使用DummyGridLayerStack不幫你以任何方式。
  2. 指定您自己的樣式選項。只有當你知道你在做什麼時才應該這樣做。
  3. 您禁用了默認配置,但不提供替代選項。

我想2.對於NullPointerException的原因,因爲你沒有指定滾動條的樣式選項,但使用DummyGridLayerStack存在需要的參考滾動條來真正支持滾動ViewportLayer

雖然3.可能是NullPointerException的原因,因爲默認配置已禁用且未設置備用配置。

+0

我認爲問題出現在'DummyGridLayerStack'中。當我按照'natTable.setLayer(new DummyGridLayerStack());'關注或替換上面的代碼'natTable.setLayer(bodyDataLayer);'時,出現異常。 – aviit

+0

我只想在開始時創建表格。然後我將在事件中添加DataLayer。 – aviit

+0

正確的一半。正如你從堆棧跟蹤中看到的,並且考慮到我的解釋,問題在於'DummyGridLayerStack'包含用於滾動的'ViewportLayer'。但是您不指定滾動樣式位。而使用'DummyGridLayerStack'沒有任何意義,因爲它主要用於演示目的,並且不用於應用程序。 –

相關問題