我已经在Android上使用了侦听器,但从未遇到任何问题,但是今天,当它尝试在Java中创建一个简单的侦听器时,我收到NullPointerException,这是什么原因造成的,我该如何解决?

这包括3个类,ListenerMainStart.java,SendMessageClass.java和ReceiveMessageClass.java

ListenerMainStart.java

public class ListenerMainStart {

public static void main(String[] args) {

    new SendMessageClass();

}
}


SendMessageClass.java

public class SendMessageClass {

public OnStringRequestedListener onStringListener;

public Timer timer;

public SendMessageClass() {

    timer = new Timer();
    timer.schedule(new TimerAction(), 3000);

}

public void SetOnStringRequestedListener(OnStringRequestedListener listener) {
       System.out.println("value of onStringListener " + onStringListener.toString());
       onStringListener = listener;

    }

public interface OnStringRequestedListener {

public void passString(String sendString);

}

public class TimerAction extends TimerTask {

@Override
public void run() {

    if (onStringListener!=null){
   // pass string to other class, ONSTRINGLISTENER IS ALWASY NULL
   onStringListener.passString("string sent from SendMessageclass");
    } else {
        System.out.println("onStringListener is null");
    }

}

}

}


ReceiveMessageClass.java

public class ReceiveMessageClass implements SendMessageClass.OnStringRequestedListener {

SendMessageClass senderClass;

public ReceiveMessageClass() {

// instantiate class
senderClass = new SendMessageClass();

   // set the listener to the class
senderClass.SetOnStringRequestedListener(this);

}

@Override
public void passString(String sendString) {

     // do action when string is sent from other class
     System.out.println("message recevied from other class is " + sendString);

}
}

最佳答案

看来您需要在打开计时器之前调用“ SetOnStringRequestedListener”。实际上,该方法永远不会被调用,并且onStringListener也永远不会被设置。您确实在接收器中调用了该行代码,但是当然在那儿太晚了。您的主体应实例化接收方和发送方SetOnStringRequestedListener,然后关闭计时器。

SendMessageClass send = new SendMessageClass();
ReceiveMessageClass recv = new ReceiveMessageClass()
send.SetOnStringRequestedListener(recv)


编辑:然后取出引用发送者的接收者中的所有代码。使用监听器的想法是,这两个类彼此之间并不直接了解。

10-07 19:02
查看更多