Hi…
A NullPointerException is occurring at following place.
java.lang.NullPointerException
at com.abnamro.gddm.clm.bot.Discourse.processMessage(Discourse.java:230)
at com.abnamro.gddm.clm.bot.MessageDispatcher.processPacket(MessageDispa
tcher.java:55)
at org.jivesoftware.smack.PacketReader$ListenerWrapper.notifyListener(Pa
cketReader.java:822)
at org.jivesoftware.smack.PacketReader.processListeners(PacketReader.jav
a:260)
at org.jivesoftware.smack.PacketReader.access$100(PacketReader.java:43)
at org.jivesoftware.smack.PacketReader$2.run(PacketReader.java:72)
It seems that smack API is passing null to the bot code because there is no possibility of entering a null value through the keyboard in the chat window. Can anyone suggest what could be the reason of this NullPointeException!!! Is there any place where this exception can be handled?
and the code is,
Discourse.java
public *void *processMessage( Message aMessage ) {
String myMessageBody = aMessage.getBody();
boolean wasProcessed = false;
wasUsed();
for (String myRegex : commands.keySet()) {
{color:#ff0000}if (myMessageBody.matches(myRegex)) { {color} //******** processMessage(Discourse.java:230)*******
processMessageUsingMethod( commands.get(myRegex), aMessage );
wasProcessed = true;
}
}
if (wasProcessed == false) {
try {
processDefaultHelpMessage( aMessage );
} catch(ClcmBaseException clcmBaseException) {
logger.fatal(clcmBaseException.getMessage());
sendMessage(“Exception Occured \n” +clcmBaseException.getMessage());
}
}
wasUsed();
}
MessageDispatcher.java
public void processPacket( Packet aPacket ) {
Message myMessage = (Message)aPacket;
Discourse myDiscourse = bot.getDiscourse( myMessage.getFrom() );
myDiscourse.processMessage( myMessage ); //MessageDispatcher.processPacket(MessageDispatcher.java:55)
}
**Smack code: **
PacketReader.java
/**
- A wrapper class to associate a packet collector with a listener.
*/
private static class ListenerWrapper {
private PacketListener packetListener;
private PacketCollector packetCollector;
public ListenerWrapper(PacketReader packetReader, PacketListener packetListener,
PacketFilter packetFilter)
{
this.packetListener = packetListener;
this.packetCollector = new PacketCollector(packetReader, packetFilter);
}
public boolean equals(Object object) {
if (object == null) {
return false;
}
if (object instanceof ListenerWrapper) {
return ((ListenerWrapper)object).packetListener.equals(this.packetListener);
}
else if (object instanceof PacketListener) {
return object.equals(this.packetListener);
}
return false;
}
public boolean notifyListener() {
Packet packet = packetCollector.pollResult();
if (packet != null) {
{color:#ff0000}packetListener.processPacket(packet); //smack.PacketReader$ListenerWrapper.notifyListener(PacketReader.java:822)*
return true;
}
else {
return false;
}
}
public void cancel() {
packetCollector.cancel();
packetCollector = null;
packetListener = null;
}
}
**----
**
private void processListeners() {
while (!done) {
synchronized (listeners) {
if (listeners.size() > 0) {
for (int i=listeners.size()-1; i>=0; i–) {
if (listeners.get(i) == null) {
listeners.remove(i);
}
}
}
}
boolean processedPacket = false;
int size = listeners.size();
for (int i=0; i<size; i++) {
ListenerWrapper wrapper = (ListenerWrapper)listeners.get(i);
if (wrapper != null) {
{color:#ff0000}processedPacket = processedPacket || wrapper.notifyListener(); //PacketReader.processListeners(PacketReader.java:260)*
}
}
if (!processedPacket) {
try {
// Wait until more packets are ready to be processed.
synchronized (listenerThread) {
listenerThread.wait();
}
}
catch (InterruptedException ie) {
// Ignore.
}
}
}
}