2017-09-27 11 views
2

성운 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

짧은 대답은 잘못하고 있기 때문입니다. NatTable 사용 방법은 Getting Started Tutorial을 참조하십시오.

  1. 당신은 어떤 방법으로 도움이되지 않는 DummyGridLayerStack을 사용하여 결과를 사용하는 층이 제공되지 않습니다

    코드에서 적어도 3 오류가 있습니다.

  2. 자신 만의 스타일 옵션을 지정합니다. 그것은 당신이 무엇을하고 있는지를 아는 경우에만 이루어져야합니다.
  3. 기본 구성을 사용하지 않았지만 다른 구성을 제공하지 않았습니다. 당신은 스크롤바의 스타일 옵션을 지정하지만, DummyGridLayerStack를 사용하여 실제로 스크롤을 지원하기 위해 스크롤바에 대한 참조를 필요로하는 ViewportLayer이 없기 때문에 내가 2. 가정

NullPointerException에 대한 이유입니다.

기본 구성이 해제되어 대체 구성이 설정되어 있지 않으므로 3.가 NullPointerException의 원인 일 수 있습니다.

+0

문제는'DummyGridLayerStack'에 있다고 생각합니다. 위의 코드 인'natTable.setLayer (bodyDataLayer);를'natTable.setLayer (new DummyGridLayerStack());'에 따라 사용하거나 대체하면 예외가 나타납니다. – aviit

+0

시작시 테이블을 만들고 싶습니다. 그런 다음 이벤트에 DataLayer를 추가합니다. – aviit

+0

반쪽 올바른지. Stacktrace에서 알 수 있듯이 제 설명을 고려하면 'DummyGridLayerStack'에는 스크롤을위한'ViewportLayer'가 포함되어 있다는 점이 문제입니다. 그러나 스크롤 스타일 비트는 지정하지 않습니다. 'DummyGridLayerStack'을 사용하는 것은 주로 데모 목적으로 사용되며 응용 프로그램에서 사용되지 않기 때문에 어떤 식 으로든 의미가 없습니다. –