0

I'm creating a chat room using JSF ,I am using Eclipse and Tomcat 7 to deploy and I have a java.lang.NullPointerException

this is my managed bean:

 package Service;

    import java.io.Serializable;
    import java.util.Collections;
    import java.util.Date;
    import java.util.LinkedList;
    import java.util.List;
    import javax.ejb.EJB;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.ViewScoped;
    import javax.faces.event.ActionEvent;
    import org.primefaces.context.RequestContext;

    import chat.Message;
    import chat.MessageManagerLocal;

    @ManagedBean
    @ViewScoped
    public class MessageBean implements Serializable {

        @EJB
        MessageManagerLocal mm;

        private final List messages;
        private Date lastUpdate;
        private Message message;

        /**
         * Creates a new instance of MessageBean
         */
        public MessageBean() {
            messages = Collections.synchronizedList(new LinkedList());
            lastUpdate = new Date(0);
            message = new Message();
        }

        public Date getLastUpdate() {
            return lastUpdate;
        }

        public void setLastUpdate(Date lastUpdate) {
            this.lastUpdate = lastUpdate;
        }

        public Message getMessage() {
            return message;
        }

        public void setMessage(Message message) {
            this.message = message;
        }

        public void sendMessage(ActionEvent evt) {
            mm.sendMessage(message);
        }

            public void firstUnreadMessage(ActionEvent evt) {
   RequestContext ctx = RequestContext.getCurrentInstance();

   Message m =new Message();
   if(m!=null)
   {
   m = mm.getFirstAfter(lastUpdate);

   ctx.addCallbackParam("ok", m!=null);


   lastUpdate = m.getDateSent();

   ctx.addCallbackParam("user", m.getUser());
   ctx.addCallbackParam("dateSent", m.getDateSent().toString());
   ctx.addCallbackParam("text", m.getMessage());
   }
       }


    }

this is the MessageManager class

package chat;

    import java.util.Collections;
    import java.util.Date;
    import java.util.LinkedList;
    import java.util.List;
    import javax.ejb.Singleton; 
    import javax.ejb.Startup;
    import chat.Message;

    @Singleton
    @Startup
    public class MessageManager implements MessageManagerLocal {

        private final List<Message> messages =
                Collections.synchronizedList(new LinkedList());;

        @Override
        public void sendMessage(Message msg) {
            messages.add(msg);
            msg.setDateSent(new Date());
        }

        @Override
        public Message getFirstAfter(Date after) {
            if(messages.isEmpty())
                return null;
            if(after == null)
                return messages.get(0);
            for(Message m : messages) {
                if(m.getDateSent().after(after))
                    return m;
            }
            return null;
        }

    }

This this the exception:

javax.faces.event.AbortProcessingException: /chats.xhtml @21,79 actionListener="#{messageBean.firstUnreadMessage}": java.lang.NullPointerException

and here my chat.xhtml page :

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      >
    <h:head>
        <title>Chat test!</title>
    </h:head>

    <h:body>
        <h:form prependId="false">
            <h:panelGrid columns="2">
                Name: <p:inputText value="#{messageBean.message.user}"/>
                Text: <p:inputText value="#{messageBean.message.message}"/>
                <p:commandButton type="reset" value="Clear"/>
                <p:commandButton value="Send!" actionListener="#{messageBean.sendMessage}"/>
            </h:panelGrid>

            <p:remoteCommand name="nextMessage" actionListener="#{messageBean.firstUnreadMessage}"
                             oncomplete="updateMessages(xhr, status, args);"/>
        </h:form>
        <hr/>
        <h3>Live chat</h3>
        <div id="chat"></div>
        <script type="text/javascript">
        setInterval("nextMessage()", 200); //update the chart every 200 ms               

        function updateMessages(xhr, status, args) {
            if(!args.ok) return;
            $('#chat').append('<div class="msg">[' +args.dateSent+ '] <strong>'+args.user+'</strong>: '+args.text+'</div>');
        }

    </script>
    </h:body>
</html>

I modified my code and did this : Message m =new Message(); but nothing changes

develop55
  • 1
  • 2
  • I modified my code and did like in the answer but nothing changes . – develop55 May 13 '15 at 01:27
  • Your question indicates in no way that you understand what a `NullPointerException` means. You would otherwise have asked "Why is variable X null?" and not "Why does code throw NullPointerException when I try to access variable X?". Work on that first. That's just basic Java. – BalusC May 13 '15 at 19:27

0 Answers0