0

This is a simple problem with easy fix. But I don't know why it happened and cannot find an answer on google.I need to open a JFace dialog which contains a CheckBoxTableViewer:

protected void createContent(Composite parent) {
    cbtViewer = CheckboxTableViewer.newCheckList(parent, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
    cbtViewer.setInput(items);
}

Where items is an instance of List defined as

protected List<T> items;

public void setItems(List<T> items) {
    this.items = items;
}

In the caller of the dialog, I provide items in this way:

dialog = new SaveDialog(shell);
TestItem[] items = getTestItems();
dialog.setItems(Arrays.asList(items));

This gives me null argument error when dialog invokes method setItems(). But this worked:

dialog.setItems(new ArrayList(Arrays.asList(items)));

I got some information about Arrays.asList() here Create ArrayList from array, but still don't understand why checkbox table viewer's setInput() method throws null argument error on a not-null object? Thanks

PS: I know the difference between Arrays.asList() and new ArrayList(Arrays.asList()). What I don't understand is why checkbox table viewer cannot take the list object returned by Arrays.asList() as its input.

Stack trace for the failed test case. This is not a unit test. I need to see the dialog with its UI.

org.eclipse.core.runtime.AssertionFailedException: null argument:
    at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
    at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
    at org.eclipse.jface.viewers.StructuredViewer.assertElementsNotNull(StructuredViewer.java:597)
    at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:993)
    at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:699)
    at org.eclipse.jface.viewers.AbstractTableViewer.getRawChildren(AbstractTableViewer.java:1095)
    at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:900)
    at org.eclipse.jface.viewers.StructuredViewer.getSortedChildren(StructuredViewer.java:1049)
    at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:701)
    at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:649)
    at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:636)
    at org.eclipse.jface.viewers.AbstractTableViewer$1.run(AbstractTableViewer.java:592)
    at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1427)
    at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1388)
    at org.eclipse.jface.viewers.CheckboxTableViewer.preservingSelection(CheckboxTableViewer.java:349)
    at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:590)
    at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:280)
    at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1674)
    at test.app.internal.widget.dialog.ClientMultiSelectionDialog.createContent(ClientMultiSelectionDialog.java:59)
    at test.app.internal.widget.tab.SaveDialog.createContent(SaveDialog.java:109)
    at test.app.internal.widget.tab.SaveDialog.createDialogArea(SaveDialog.java:60)
    at org.eclipse.jface.dialogs.Dialog.createContents(Dialog.java:745)
    at org.eclipse.jface.window.Window.create(Window.java:444)
    at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1071)
    at org.eclipse.jface.window.Window.open(Window.java:822)
    at test.app.internal.AppTester.testSaveDialog(AppTester.java:136)
    at test.app.internal.AppTester.testDialog(AppTester.java:99)
    at test.app.internal.EntryPoint$12$1.widgetSelected(EntryPoint.java:611)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:262)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:700)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:602)
    at org.eclipse.swt.widgets.Display.executeNextEvent(Display.java:1212)
    at org.eclipse.swt.widgets.Display.runPendingMessages(Display.java:1193)
    at org.eclipse.swt.widgets.Display.safeReadAndDispatch(Display.java:1176)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1168)
    at org.eclipse.rap.rwt.application.AbstractEntryPoint.createUI(AbstractEntryPoint.java:62)
    at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWTLifeCycle.java:172)
    at org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle$UIThreadController.run(RWTLifeCycle.java:284)
    at java.lang.Thread.run(Thread.java:745)
    at org.eclipse.rap.rwt.internal.lifecycle.UIThread.run(UIThread.java:105)
Community
  • 1
  • 1
CMZS
  • 538
  • 5
  • 16
  • Possible duplicate of [Difference between Arrays.asList(array) vs new ArrayList(Arrays.asList(ia)) in java](http://stackoverflow.com/questions/16748030/difference-between-arrays-aslistarray-vs-new-arraylistintegerarrays-aslist) – Jonny Henly Sep 27 '16 at 19:28
  • I know the difference between the two. Just curious Arrays.asList() also returns a list object, why it cannot be used as the input of a check box table viewer? – CMZS Sep 27 '16 at 19:31
  • Well what does `setItems` do? Show us the stack trace. – greg-449 Sep 27 '16 at 19:36
  • Updated as requested – CMZS Sep 27 '16 at 19:51
  • 1
    What content provider are you using for the table? Its 'getElements' method appears to be returning null. – greg-449 Sep 27 '16 at 20:03
  • Yes it's getElements() returns null which caused the null argument error. You are master of eclipse api. Thanks. – CMZS Sep 28 '16 at 15:32

0 Answers0