SWT Tablefilter - unerklärliche Exception

Hi,

ich hab mal wieder ein Problem.

Ich habe in einer RCP-Anwendung ein ViewerFilter auf meine Table gelegt. Soweit alles ok, wenn ich jetzt jedoch die Anwendung ausführe kommt folgender Fehler:
Could not create the view: null argument:
org.eclipse.core.runtime.AssertionFailedException: null argument


hier der Quellcode
Code:
	private TestFilter filter;

	public void createPartControl(Composite parent) {
	....
	filter = new TestFilter();
	....
		searchButton.addSelectionListener(new SelectionAdapter() {
		        public void widgetSelected(SelectionEvent event) {
		        	filter.setSearchText(searchText.getText());	
		        	tableviewer.refresh();
		        });
	...
	tableviewer.addFilter(filter);

hier die Filterklasse:
Code:
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;

public class TestFilter extends ViewerFilter {

	private String searchString;

	public void setSearchText(String s) {
		// Search must be a substring of the existing value
		this.searchString = ".*" + s + ".*";
	}

	@Override
	public boolean select(Viewer viewer, Object parentElement, Object element) {
		if (searchString == null || searchString.length() == 0) {
			return true;
		}
		TestMethod t = (TestMethod) element;
		if (t.getDescription().matches(searchString)) {
			return true;
		}

		return false;
	}
}

MfG Jango
 
Zuletzt bearbeitet:
Das kann denke ich nichts werden, da du zu dem Viewer einen Filter hinzufügen willst, der noch nicht initialisiert wurde.
 
Bitte poste doch mal den ganzen StackTrace. Irgendwo muss ja eine Zeilennummer von deinem Code auftauchen, die die Exception bewirkt.

Hast du eine Entwicklungsumgebung wie Java? Dann setze doch einen Breackpoint auf diese Exception und schau warum es da Probleme gibt.
 
Hi,

hier ist der komplette Stacktrache:

Code:
org.eclipse.core.runtime.AssertionFailedException: null argument:
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:86)
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:74)
	at org.eclipse.jface.viewers.StructuredViewer.disassociate(StructuredViewer.java:618)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:719)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:633)
	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:620)
	at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1430)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1365)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1328)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1428)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:537)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1387)
	at org.eclipse.jface.viewers.StructuredViewer.addFilter(StructuredViewer.java:567)
	at testanalysis.View.createPartControl(View.java:106)
	at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:371)
	at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:230)
	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:594)
	at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:306)
	at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:531)
	at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180)
	at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270)
	at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
	at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473)
	at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256)
	at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1209)
	at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1608)
	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:649)
	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:576)
	at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:568)
	at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:271)
	at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:964)
	at org.eclipse.ui.internal.WorkbenchPage.onActivate(WorkbenchPage.java:2593)
	at org.eclipse.ui.internal.WorkbenchWindow$25.run(WorkbenchWindow.java:2873)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchWindow.setActivePage(WorkbenchWindow.java:2854)
	at org.eclipse.ui.internal.WorkbenchWindow.busyOpenPage(WorkbenchWindow.java:759)
	at org.eclipse.ui.internal.Workbench$21.runWithException(Workbench.java:1027)
	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3800)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3425)
	at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
	at org.eclipse.ui.internal.Workbench$27.runWithException(Workbench.java:1361)
	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:178)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4251)
	at org.eclipse.ui.internal.StartupThreading.runWithoutExceptions(StartupThreading.java:94)
	at org.eclipse.ui.internal.Workbench.init(Workbench.java:1356)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2312)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at testanalysis.Application.start(Application.java:20)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	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:549)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1212)

wenn ich debugge springt er in die Funktion addFilter und wirft sofort die exception.

Die Zeilennummer im Stacktrace bezieht sich auf die Zeile mit dem addFilter.

MfG Jango
 
Hmm also ich kann bei mir den JFace Sourcecode anschauen. Vielleicht schaust du da mal rein. Aber irgendwas scheinst du vergessen haben zu machen. So direkt kann ich das so aber auch nicht sagen.

Hast du mal Beispielcode zum TableViewer und ViewerFilter angeschaut und geguckt ob da vielleicht irgendwas steht was du noch nicht gemacht hast?
 
Hi,

@zeja
das habe ich als aller erstes geprüft, ob ich nicht irgendwas vergessen habe. Als Beispiel für den Filter habe ich das hier gefunden: Beispiel und laut dem, reicht das alles aus, damit es funktioniert.

MfG Jango
 
Kannst du noch mehr von deinem Code posten? An dem ViewerFilter selber liegts wohl nicht. Irgendwas muss an dem TableViewer nicht richtig sein.
 
ok hier ist der code:

Code:
	private TableViewer viewer;
	private String[] header = {"id", "Name", "Description", "Thread", "Scenario",
								"Loop", "Step", "Duration", "Started at", 
								"Finished at", "Exception" };
	private TableItem item;
	private TestFilter filter;

	public void createPartControl(Composite parent) {
		GridLayout layout = new GridLayout(3, false);
		parent.setLayout(layout);

		ReadXMLFile.readXML("test.xml");
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
				| SWT.V_SCROLL);

		for(int i=0; i<header.length; i++){
			 createTableHeader(header[i]);
		}
		
		Label searchLabel = new Label(parent, SWT.NONE);
		searchLabel.setText("Search: ");
		
		final Text searchText = new Text(parent, SWT.BORDER | SWT.SEARCH);
		searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
				| GridData.HORIZONTAL_ALIGN_FILL));
		
		Button searchButton = new Button(parent, SWT.NONE);
		searchButton.setText("Filter");
		
		filter = new TestFilter();
		
		searchButton.addSelectionListener(new SelectionAdapter() {
		        public void widgetSelected(SelectionEvent event) {
		        	filter.setSearchText(searchText.getText());
		        	viewer.refresh();
		        }
		     });
		
 		viewer.getTable().setHeaderVisible(true);
		viewer.getTable().setLinesVisible(true);

		TableColumn[] columns = viewer.getTable().getColumns();

		//Auf jede Tabellenspalte einen Listener legen
		for (int i = 0; i < columns.length; i++) {
			final int _i = i;
			columns[i].addListener(SWT.Selection, new Listener() {
				private int colPos = -1;
				private boolean sortFlag = true;
				{
					colPos = _i;
				}
				public void handleEvent(Event event) {
					sortFlag = !sortFlag;
					//Sort
					TableItem[] tableItems = viewer.getTable().getItems();
					sortTable(viewer.getTable(), tableItems, colPos, sortFlag);
				}

			});
		}

		viewer.addFilter(filter);
		
		GridData gridData = new GridData();
		gridData.verticalAlignment = GridData.FILL;
		gridData.horizontalSpan = 3;
		gridData.grabExcessHorizontalSpace = true;
		gridData.grabExcessVerticalSpace = true;
		gridData.horizontalAlignment = GridData.FILL;
		viewer.getControl().setLayoutData(gridData);

	}

MfG Jango
 
Das einzige was mir auffält ist, dass du vor dem hinzufügen des Filters noch keinen Input gesetzt hast. Wenn der direkt versucht zu filtern gibts dadurch vielleicht ne NPE.
 

Neue Beiträge

Zurück