[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[news.eclipse.helpwanted] Problems with Table in RCP

Hi,

I have a problem with the columns of a table. I wrote an RCP-Application and get a NullPointerException when closing this Application. Here is the Code I wrote, followed by the Stacktrace of the Exception:


public class PartDetailsPage implements IDetailsPage {

    String[] units = UnitLoader.getInstance().getUnitsAsString();

protected static final Logger log = Logger.getLogger(PartDetailsPage.class);

    class PartsContentProvider implements IStructuredContentProvider {

        protected final Logger log = Logger
                .getLogger(PartsContentProvider.class);

public Object[] getElements(Object inputElement) {
if (inputElement instanceof Part) {
Part part = (Part)inputElement;
Object[] returnObjectArray = part.getIngredients().toArray();
return returnObjectArray;
}


            log.error("getElements returns with null!");

            return new Object[0];
        }

        public void dispose() {
        }

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
viewer.refresh();
}
}


class PartsLabelProvider extends LabelProvider implements ITableLabelProvider {

protected final Logger log = Logger.getLogger(PartsLabelProvider.class);

        public Image getColumnImage(Object element, int columnIndex) {

            Image returnImage = null;

switch (columnIndex) {
case 0: returnImage = returnImage = CorePlugin.getDefault().getImage(
CorePlugin.IMG_FOOD);
break;
}
return returnImage;
}


        public String getColumnText(Object element, int columnIndex) {
            if (!(element instanceof Ingredient)) return "";
            Ingredient ing = (Ingredient)element;

            String returnString = "";

switch (columnIndex) {
case 0: returnString = ing.getAmount(); break;
case 1: returnString = ing.getUnit().getId(); break;
case 2: returnString = ing.getFood().getFood().toString(ing.getAmount());
}
return returnString;
}


    }

    class IngredientCellModifier implements ICellModifier {

public boolean canModify(Object element, String property) {
if (element instanceof Ingredient) {
int index = Arrays.asList(ingredientViewer.getColumnProperties())
.indexOf(property);
switch (index) {
case 0:
return true;
case 1:
return true;
case 2:
return false;
}
}
if (element instanceof String) return true;


            return false;
        }

public Object getValue(Object element, String property) {
if (element instanceof Ingredient) {
Ingredient ing = (Ingredient) element;
int index = Arrays.asList(ingredientViewer.getColumnProperties())
.indexOf(property);
switch (index) {
case 0:
return ing.getAmount();
case 1:
for (int i =0; i<units.length; i++ ) {
if (units[i].equals(ing.getUnit().getId())) return new Integer(i);
}
return new Integer(0);
case 2:
return ing.getFood().getFood().toString(ing.getAmount());
}
}
return null;
}


public void modify(Object element, String property, Object value) {
Ingredient ing = (Ingredient) ((TableItem) element)
.getData();
int index = Arrays.asList(ingredientViewer.getColumnProperties())
.indexOf(property);
SimpleDateFormat sdf = new SimpleDateFormat(Messages
.getString("dateFormat")); //$NON-NLS-1$
switch (index) {
case 0:
ing.setAmount(value.toString());
break;
case 1:


ing.setUnit(UnitLoader.getInstance().loadUnit(units[((Integer)value).intValue()]));
                break;
            case 2: break;
            }
            ingredientViewer.refresh(true);
        }
    }

    private IManagedForm mform;
    private Part input;
    private TableViewer ingredientViewer;
    private Text steps;

    public PartDetailsPage() {
        super();
    }

    public void createContents(final Composite parent) {
        GridLayout layout = new GridLayout(2, false);
	layout.marginHeight = 5;
	layout.marginWidth = 5;
	parent.setLayout(layout);

FormToolkit toolkit = mform.getToolkit();
final Section s1 = toolkit.createSection(parent, Section.EXPANDED | Section.COMPACT | Section.TWISTIE);
s1.marginWidth = 10;
s1.marginHeight = 10;
s1.setText("Ingredients");
s1.setDescription("Insert all the properties for one part of the recipe");
s1.addExpansionListener(new IExpansionListener() {
public void expansionStateChanging(ExpansionEvent e) {
}


public void expansionStateChanged(ExpansionEvent e) {
if (!(s1.isExpanded())) {
parent.pack();
}
}
});
GridData gd = new GridData(GridData.FILL_BOTH);
s1.setLayoutData(gd);
toolkit.createCompositeSeparator(s1);
Composite client = toolkit.createComposite(s1);
GridLayout glayout = new GridLayout(2,false);
glayout.marginWidth = glayout.marginHeight = 5;
glayout.verticalSpacing=5;
glayout.numColumns = 2;
client.setLayout(glayout);

Table t = toolkit.createTable(client,SWT.SINGLE | SWT.FULL_SELECTION);
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalIndent=2;
gd.heightHint = 20;
gd.widthHint = 100;
t.setLayoutData(gd);
t.setHeaderVisible(true);
t.setLinesVisible(true);

Button b = toolkit.createButton(client, Messages.getString("PartsBlock.add"), SWT.PUSH); //$NON-NLS-1$
gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
b.setLayoutData(gd);

TableColumn amountTc = new TableColumn(t, SWT.RIGHT, 0);
amountTc.setText(Messages.getString("PartDetails.amount")); //$NON-NLS-1$
amountTc.setWidth(50);
TableColumn unitTc = new TableColumn(t, SWT.LEFT, 1);
unitTc.setText(Messages.getString("PartDetails.unit")); //$NON-NLS-1$
unitTc.setWidth(70);
TableColumn foodTc = new TableColumn(t, SWT.LEFT, 2);
foodTc.setText(Messages.getString("PartDetails.food")); //$NON-NLS-1$
foodTc.setWidth(200);


TextCellEditor ce1 = new TextCellEditor(t);
ComboBoxCellEditor ce2 = new ComboBoxCellEditor(t,UnitLoader.getInstance().getUnitsAsString(),SWT.DROP_DOWN|SWT.READ_ONLY);
IngredientDialogCellEditor ce3 = new IngredientDialogCellEditor(t);


ingredientViewer = new TableViewer(t);
ingredientViewer.setContentProvider(new PartsContentProvider());
ingredientViewer.setColumnProperties(new String[] {"amount","unit","food"});
ingredientViewer.setLabelProvider(new PartsLabelProvider());
ingredientViewer.setCellEditors(new CellEditor[] { ce1, ce2, ce3 });
ingredientViewer.setCellModifier(new IngredientCellModifier());


	toolkit.paintBordersFor(s1);
	toolkit.paintBordersFor(client);
	s1.setClient(client);

final Section s2 = toolkit.createSection(parent, Section.EXPANDED| Section.COMPACT | Section.TWISTIE);
s2.marginWidth = 10;
s2.setText("Steps");
s2.setDescription("Insert all the properties for one part of the recipe");
s2.addExpansionListener(new IExpansionListener() {
public void expansionStateChanging(ExpansionEvent e) {
}


            public void expansionStateChanged(ExpansionEvent e) {
                if (!(s2.isExpanded())) {
                    parent.pack();
                }

            }
        });
	gd = new GridData(GridData.FILL_BOTH);
	gd.horizontalSpan = 1;
	s2.setLayoutData(gd);
	toolkit.createCompositeSeparator(s2);
	Composite client2 = toolkit.createComposite(s2);
	GridLayout glayout2 = new GridLayout();
	glayout2.marginWidth = glayout2.marginHeight = 5;
	glayout2.numColumns = 2;
	client2.setLayout(glayout2);

gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan=2;
steps = toolkit.createText(client2,"",SWT.MULTI | SWT.WRAP);
steps.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TREE_BORDER);


        steps.setLayoutData(gd);

	toolkit.paintBordersFor(client2);
	toolkit.paintBordersFor(s2);
	s2.setClient(client2);
    }

    public void initialize(IManagedForm form) {
        mform=form;
    }

    public void dispose() {
    }

    public boolean isDirty() {
        return false;
    }

    public void commit(boolean onSave) {
    }

    public boolean setFormInput(Object input) {
        return false;
    }

    public void setFocus() {
    }

    public boolean isStale() {
        return false;
    }

    public void refresh() {
    }

    public void selectionChanged(IFormPart part, ISelection selection) {
	IStructuredSelection ssel = (IStructuredSelection)selection;
	if (ssel.size()==1) {
	    Part input = (Part)ssel.getFirstElement();
	    ingredientViewer.setInput(input);
	    steps.setText(getStepsAsString(input));
	}
    }

    protected String getStepsAsString(Part part) {
        String temp="";
        log.debug("Amount of Steps: "+part.getSteps().size());
        Iterator it = part.getSteps().iterator();

        while (it.hasNext()) {
            Step step = (Step)it.next();
            log.debug("Step.text() = "+step.getText());
            temp+=step.getText()+"\n\n";
        }
        return temp;
    }
}

!ENTRY org.eclipse.ui.workbench 4 2 2005-07-27 22:31:39.656
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".
!STACK 0
java.lang.NullPointerException
at org.eclipse.swt.widgets.Table.releaseWidget(Table.java:1705)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:720)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:588)
at org.eclipse.swt.widgets.Composite.releaseWidget(Composite.java:593)
at org.eclipse.swt.widgets.Canvas.releaseWidget(Canvas.java:117)
at org.eclipse.swt.widgets.Decorations.releaseWidget(Decorations.java:782)
at org.eclipse.swt.widgets.Shell.releaseWidget(Shell.java:868)
at org.eclipse.swt.widgets.Widget.dispose(Widget.java:382)
at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:441)
at org.eclipse.swt.widgets.Shell.dispose(Shell.java:499)
at org.eclipse.jface.window.Window.close(Window.java:321)
at org.eclipse.jface.window.ApplicationWindow.close(ApplicationWindow.java:291)
at org.eclipse.ui.internal.WorkbenchWindow.hardClose(WorkbenchWindow.java:1403)
at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:646)
at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:627)
at org.eclipse.ui.internal.WorkbenchWindow$2.run(WorkbenchWindow.java:728)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:726)
at org.eclipse.jface.window.WindowManager.close(WindowManager.java:108)
at org.eclipse.ui.internal.Workbench$11.run(Workbench.java:588)
at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
at org.eclipse.core.runtime.Platform.run(Platform.java:783)
at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:585)
at org.eclipse.ui.internal.Workbench.access$8(Workbench.java:522)
at org.eclipse.ui.internal.Workbench$13.run(Workbench.java:713)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
at org.eclipse.ui.internal.Workbench.close(Workbench.java:711)
at org.eclipse.ui.internal.Workbench.close(Workbench.java:686)
at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:643)
at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:627)
at org.eclipse.ui.internal.WorkbenchWindow$2.run(WorkbenchWindow.java:728)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:726)
at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:727)
at org.eclipse.jface.window.Window$3.shellClosed(Window.java:674)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:159)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:867)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:852)
at org.eclipse.swt.widgets.Decorations.closeWidget(Decorations.java:257)
at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1649)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3040)
at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1582)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3706)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1651)
at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:410)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3123)
at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1582)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3706)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1651)
at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:410)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3123)
at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1582)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3706)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1656)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2711)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:367)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
at de.beecook.core.BeeCookApplication.run(BeeCookApplication.java:39)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
at org.eclipse.core.launcher.Main.run(Main.java:973)
at org.eclipse.core.launcher.Main.main(Main.java:948)