简体   繁体   中英

nullpointerexception

my problem is a simply a nullpointerexception but , i don't get how i figure it out.Here is the code.

I am trying to run primefaces' chat utilitie. and i am using tomcat 7.. as far as i can reach here but now i got this issue.

public class ChatView {

private final PushContext pushContext = PushContextFactory.getDefault().getPushContext();

private ChatUsers users;

    private String privateMessage;

private String globalMessage;

    private String username;

    private boolean loggedIn;

private String privateUser;

private final static String CHANNEL = "/chat/";

public void setUsers(ChatUsers users) {
    this.users = users;
}

public String getPrivateUser() {
    return privateUser;
}

public void setPrivateUser(String privateUser) {
    this.privateUser = privateUser;
}

public String getGlobalMessage() {
    return globalMessage;
}

public void setGlobalMessage(String globalMessage) {
    this.globalMessage = globalMessage;
}

public String getPrivateMessage() {
    return privateMessage;
}

public void setPrivateMessage(String privateMessage) {
    this.privateMessage = privateMessage;
}

    public String getUsername() {
            return username;
    }
    public void setUsername(String username) {
            this.username = username;
    }

    public boolean isLoggedIn() {
            return loggedIn;
    }
    public void setLoggedIn(boolean loggedIn) {
            this.loggedIn = loggedIn;
    }

    public void sendGlobal() {
    pushContext.push(CHANNEL + "*", username + ": " + globalMessage);

            globalMessage = null;
    }

public void sendPrivate() {
    pushContext.push(CHANNEL + privateUser, "[PM] " + username + ": " + privateMessage);

    privateMessage = null;
}

    public void login() {
    RequestContext requestContext = RequestContext.getCurrentInstance();

            if(users.contains(username)) {
        loggedIn = false;
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username taken", "Try with another username."));

        requestContext.update("growl");
    }
    else {
        users.addUser(username);
        pushContext.push(CHANNEL, username + " joined the channel.");
        requestContext.execute("subscriber.connect('/" + username + "')");
        loggedIn = true;
    }
    }

public void disconnect() {
    //remove user and update ui
    users.removeUser(username);
    RequestContext.getCurrentInstance().update("form:users");

    //push leave information
    pushContext.push(CHANNEL, username + " left the channel.");

    //reset state
    loggedIn = false;
    username = null;
}
}

....

public class User implements Serializable {


private static final long serialVersionUID = 1L;
    private String firstname;
    private String lastname;
    private Integer age;
    private String street;
    private String city;
    private String postalCode;
    private String info;
    private String email;
    private String phone;

    public String getFirstname() {
            return firstname;
    }

    public void setFirstname(String firstname) {
            this.firstname = firstname;
    }

    public String getLastname() {
            return lastname;
    }

    public void setLastname(String lastname) {
            this.lastname = lastname;
    }

    public Integer getAge() {
            return age;
    }

    public void setAge(Integer age) {
            this.age = age;
    }

    public String getStreet() {
            return street;
    }

    public void setStreet(String street) {
            this.street = street;
    }

    public String getCity() {
            return city;
    }

    public void setCity(String city) {
            this.city = city;
    }

    public String getPostalCode() {
            return postalCode;
    }

    public void setPostalCode(String postalCode) {
            this.postalCode = postalCode;
    }

    public String getInfo() {
            return info;
    }

    public void setInfo(String info) {
            this.info = info;
    }

    public String getEmail() {
            return email;
    }

    public void setEmail(String email) {
            this.email = email;
    }

    public String getPhone() {
            return phone;
    }

    public void setPhone(String phone) {
            this.phone = phone;
    }
}

....

public class ChatUsers {

private List<String> users = Arrays.asList("fatih");


@PostConstruct
public void init() {
    this.users = new ArrayList<String>();
}

public List<String> getUsers() {
    return users;
}

public void setUsers(List<String> users) {
    this.users = users;
}

public void addUser(String user) {
    this.users.add(user);
}

public void removeUser(String user) {
    this.users.remove(user);
}

public boolean contains(String user) {
    return this.users.contains(user);
}
}

I am getting exception for ChatView class and for this line if(users.contains(username))

Any suggestion would be very helpful. Thanks..

Edit

'SEVERE: Received 'java.lang.UnsupportedOperationException' when invoking action  listener '#{chatView.login}' for component 'j_idt21'
Dec 25, 2012 10:01:18 PM javax.faces.event.MethodExpressionActionListener processAction
SEVERE: java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at org.primefaces.examples.view.ChatUsers.addUser(ChatUsers.java:43)
at org.primefaces.examples.view.ChatView.login(ChatView.java:109)
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.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Dec 25, 2012 10:01:18 PM com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: JSF1073: javax.faces.event.AbortProcessingException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=form:j_idt21, Message=java.lang.UnsupportedOperationException
Dec 25, 2012 10:01:18 PM com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: java.lang.UnsupportedOperationException
javax.faces.event.AbortProcessingException: java.lang.UnsupportedOperationException
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at org.primefaces.examples.view.ChatUsers.addUser(ChatUsers.java:43)
at org.primefaces.examples.view.ChatView.login(ChatView.java:109)
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.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at   javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListen    er.java:153)
... 25 more

'

You have no-where initialized the ChatUsers reference in your CharView class. So, you will get a NPE when you use it. Or you might not have called setUsers method before login method, so your users remains un-initialized.

Your declaration: -

private ChatUsers users;

should be changed to: -

private ChatUsers users = new ChatUsers();

Updated : -

In your CharView class, when you create a list like: -

private List<String> users = Arrays.asList("fatih");

You get a fixed-size list, which you cannot modify. So, in the addUsers method of ChatView class, you will get UnsupportedOperationException when you try to add users to it.

You should create your list like this: -

private List<String> users = new ArrayList<String>();

And if you want to initialize that list at the time of declaration, you can do: -

private List<String> users = new ArrayList<String>() {{
    add("fatih");
}};

This is called double braces initialization

Please make a note

private ChatUsers users;

And

private ChatUsers users = null;

are same for class variables.

So you have to initialize it to non null object before use it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM