while (true) {
Message message = consumer.receive();
if (message != null) {
if (message instanceof TextMessage) {
try{
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message '"+ textMessage.getText() + "'");
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(textMessage.getText());
msgBroker.routeMessageToService(msg, null);
} catch(Exception e){
e.printStackTrace();
}
} else {
break;
}
}
}在尝试运行此msgBroker.routeMessageToService(msg, null)时抛出NullPointerException。
有人能给出最好的解决方案吗?
发布于 2011-06-09 19:48:22
msgBroker为null,或者传入msgBroker.routeMessageToService()的某个参数为null。如果没有在捕获异常时打印的堆栈跟踪,就很难判断问题出在哪里-使用它,它将准确地识别哪个变量为空,而它不应该为空。
从您的代码中可以看出,考虑到msg不能为null (否则异常可能发生得更早)的事实,可能是msgBroker为null,传递给msgBroker的null造成了破坏,或者是msgBroker.routeMessageToService()中的代码有一个bug。
代码的一个更健壮的版本是:
while (true) {
Message message = consumer.receive();
//Note extra variables being checked here
if (message != null && msg != null && msgBroker != null) {
if (message instanceof TextMessage) {
try{
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message '"+ textMessage.getText() + "'");
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(textMessage.getText());
msgBroker.routeMessageToService(msg, null);
} catch(Exception e){
e.printStackTrace();
}
} else {
break;
}
}
}发布于 2011-06-09 19:55:11
唯一可能的解释是您的msgBroker为空。msg显然是存在的(否则你会得到更早的错误),并且null是routeMessageToService的第二个参数的允许值。
发布于 2017-09-21 03:27:56
我在我的应用程序中遇到了同样的问题。空指针异常是由于messaging-config.xml中的安全约束造成的。在messaging-config.xml文件中删除了目的地的安全约束后,它对我起作用了。
https://stackoverflow.com/questions/6292092
复制相似问题