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
.
谁能给出最好的解决方案?
msgBroker 要么为 null,要么传递给 msgBroker.routeMessageToService(( 的参数之一为 null。如果在捕获异常时没有打印堆栈跟踪,则很难判断问题出在哪里 - 有了它,它将准确识别哪个变量在不应该为空时为空。
从你的代码来看,考虑到msg不能为null(或者异常会更早发生(,要么msgBroker为null,要么传递给msgBroker的null正在造成损害,要么msgBroker.routeMessageToService((中的代码有一个错误。
代码的更健壮版本是:
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;
}
}
}
唯一可能的解释是你的msgBroker是NULL.msg显然存在(否则你会更早得到错误(,并且null是路由消息到服务的第二个参数的允许值。
我在应用程序中遇到了同样的问题。空指针异常是由于消息配置.xml中的安全约束造成的。在消息配置.xml文件中删除目标的安全约束后,它对我有用。