apache-flex MessageBroker中的空指针异常

58wvjzkj  于 2022-11-01  发布在  Apache
关注(0)|答案(3)|浏览(193)
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
谁能给予最佳解决方案?

2mbi3lxu

2mbi3lxu1#

msgBroker为null,或者传递给msgBroker.routeMessageToService()的某个参数为。如果在捕获异常时不打印堆栈跟踪,则很难判断问题出在哪里-使用堆栈跟踪,它将在不应该为null的时候准确地识别哪个变量为null。
从您的代码来看,鉴于msg不能为空(否则异常会在更早的时候发生),可能是msgBroker为空,传递给msgBroker的空值造成了损害,或者是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;
        }
    }
}
ilmyapht

ilmyapht2#

唯一可能的解释是您的msgBroker为NULL。msg显然存在(否则您会更早地收到错误),并且null是routeMessageToService的第二个参数所允许的值。

zysjyyx4

zysjyyx43#

我在我的应用程序中遇到了同样的问题。空指针异常是由于messaging-config.xml中的安全约束引起的。在messaging-config.xml文件中删除目标的安全约束后,它对我起作用了。

相关问题