0

I have null pointer exception in my GWT project when I call this method:

public void getPerson(ArrayList<Date> set, TextItem box, ListBox listBox) {
    if (listBox.getSelectedIndex() == 0) {
        Person person = new Person(box.getValueAsString(), set);
        Leaders.add(person);
    } else if (listBox.getSelectedIndex() == 1) {
        Person person = new Person(box.getValueAsString(), set);
        Reviewers.add(person);
    } else if (listBox.getSelectedIndex() == 2) {
        Person person = new Person(box.getValueAsString(), set);
        Leaders.add(person);
        Reviewers.add(person);
    }
}

It is part of class with the following definition:

public class FunctionalityManager {

private Date startDate;
private Date endDate;
private HashSet<Person> Leaders;
private HashSet<Person> Reviewers;
private ArrayList<SoftwareWork> SoftwareWorks;
private ArrayList<DiplomaWork> HardwareWorks;
private ArrayList<DiplomaWork> NetWorks;

public FunctionalityManager() {
    super();
    startDate = new Date();
    endDate = new Date();
    HashSet<Person> Leaders = new HashSet<Person>();
    HashSet<Person> Reviewers = new HashSet<Person>();
    ArrayList<SoftwareWork> SoftwareWorks = new ArrayList<SoftwareWork>();
    ArrayList<DiplomaWork> HardwareWorks = new ArrayList<DiplomaWork>();
    ArrayList<DiplomaWork> NetWorks = new ArrayList<DiplomaWork>();
}

...and some getters and setters. In the main class where is my onModuleLoad() method here is how i create a FunctionalityManager :

public class Salvation implements EntryPoint {

private FunctionalityManager FM = new FunctionalityManager();

and here is where I call getPerson method:

Button oneMoreButton = new Button("One More");
    oneMoreButton.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            FM.getPerson(dates, textBox, listBox);
            RootPanel.get("mainDiv").clear();
            addPerson();
        }
    });

    Button next = new Button("Next");
    next.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            FM.getPerson(dates, textBox, listBox);
            RootPanel.get("mainDiv").clear();
            addDiploma();

        }
    });

Here is and the exception if it will help:

16:53:11.406 [ERROR] [Salvation] Uncaught exception escaped
com.google.gwt.event.shared.UmbrellaException: One or more exceptions caught, see full set in UmbrellaException#getCauses
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129)
    at com.smartgwt.client.widgets.BaseWidget.fireEvent(BaseWidget.java:67)
    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 com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
    at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: null
    at org.elsys.salvation.client.FunctionalityManager.getPerson(FunctionalityManager.java:101)
    at org.elsys.salvation.client.Salvation$5.onClick(Salvation.java:149)
    at com.smartgwt.client.widgets.events.ClickEvent.dispatch(ClickEvent.java:96)
    at com.smartgwt.client.widgets.events.ClickEvent.dispatch(ClickEvent.java:1)
    at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
    at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40)
    at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193)
    at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127)
    at com.smartgwt.client.widgets.BaseWidget.fireEvent(BaseWidget.java:67)
    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 com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
    at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Unknown Source)

How can it be fixed?

malkoto1
  • 417
  • 8
  • 19

2 Answers2

1

You're not creating the global variables properly. Change the following lines...

public FunctionalityManager() {
    super();
    startDate = new Date();
    endDate = new Date();
    Leaders = new HashSet<Person>(); // Changed
    Reviewers = new HashSet<Person>(); // Changed
    SoftwareWorks = new ArrayList<SoftwareWork>(); // Changed
    HardwareWorks = new ArrayList<DiplomaWork>(); // Changed
    NetWorks = new ArrayList<DiplomaWork>(); // Changed
}

You were creating local variables called Leaders, Reviewers, etc instead of initialising the global variables.

Basically you were calling this..

HashSet<Person> Leaders = new HashSet<Person>();

Instead of just calling this...

Leaders = new HashSet<Person>();

So the global variables weren't actually being set - you were just creating new local variables with the same name, which no longer exist after the end of the FunctionalityManager() constructor method.

wattostudios
  • 8,666
  • 13
  • 43
  • 57
  • `Leaders.add(person);` is line#101, yes the TextItem and the List box were created before this(but are being added to RootPanel after the method ibeing called) – malkoto1 May 14 '12 at 14:16
0
 at org.elsys.salvation.client.FunctionalityManager.getPerson(FunctionalityManager.java:101)

Which is line 101?

I beleave TextItem box is null.

Christian Kuetbach
  • 15,850
  • 5
  • 43
  • 79