我在这里有一个使用带有自定义侦听器的单例的简单示例。我对其他一些代码有类似的问题,并决定做这个例子。它显示了与其他更复杂的代码相同的空指针问题。
空指针在这一行:
listener.onPass(sendString);
知道如何解决这个问题,为什么会这样?
这里展示了三个类,StartSelector.java用于启动其他类,Singleton.java类有一个监听接口和一个单例,它向其他类Singleton2.java发送一条短信,这个其他类实现了回调方法并接收短信字符串。
启动 Singleton 类
public class StartSelector {
public static void main(String args[]) {
Singleton.getInstance();
} // end main
}
使用自定义侦听器发送字符串消息
public class Singleton {
private OnPassStringListener listener;
private static Singleton instance;
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
}
return instance;
}
private Singleton(){
doIt();
}
private void doIt(){
transmitString("test string from singleton class");
}
public void transmitString(String sendString) {
listener.onPass(sendString); <-- NULL POINTER EXCEPTION HERE
}
public interface OnPassStringListener {
public void onPass(String stringSend);
}
} // end class Singleton
接收其他类的String消息,实现接口的回调方法
public class Singleton2 implements Singleton.OnPassStringListener {
public Singleton2() {
System.out.println("singleton2 class started");
}
@Override
public void onPass(String stringSend) {
System.out.println("message received: " + stringSend);
}
} // end class singleton2