我试图在B类中访问A类的静态变量,但是我得到了NullPointerException。代码是:
public class OutgoingMessage {
public static SMPPSession session;
public static void main(String [] args)
{
session = new SMPPSession();
}
}
并且
public class SendSMS {
public static void main(String [] args)
{
if(OutgoingMessage.session.getSessionState().toString().equals("Connected"))//Line 44
{
}
}
}
错误读取
Exception in thread "main" java.lang.NullPointerException
at SendSMS.main(SendSMS.java:44)
知道我错过了什么吗?
由于
萨蒂亚
答案 0 :(得分:6)
当然 - 你正在使用OutgoingMessage.session
,除非你还运行OutgoingMessage.main
,否则它将为空。它不像main
方法在任何地方自动调用 - 这只是应用程序的入口点。
我建议您不要改变它以使用静态初始化程序或类似的东西,而是尝试避免静态变量。
为什么OutgoingMessage
有一个静态session
变量才有意义?我希望这两个人能够一起工作,而不是由另一个人组成......例如,我可以想象:
SMPPSession session = new SMPPSession();
session.send(outgoingMessage);
甚至:
SMPPSession session = new SMPPSession();
outgoingMessage.sendInSession(session);
答案 1 :(得分:2)
OutgoingMessage.session
在你打电话的时候是null
if(OutgoingMessage.session.getSessionState()
结果为NullPointerException
。
确保在OutgoingMessage
之前执行main
类if(OutgoingMessage.session.getSessionState()
方法
除非你使用OutgoingMessage作为主类,否则在那里定义main方法没有意义,这会让人感到困惑。
答案 2 :(得分:1)
您可以在之前添加OutgoingMessage.main(args);
:
if(OutgoingMessage.session.getSessionState().toString().equals("Connected")) //Line 44 ...
答案 3 :(得分:0)
您在OutgoingMessage中缺少静态getter方法,并且只需要一个main方法。
答案 4 :(得分:0)
问题是,当您使用OutgoingMessage.session
时,它尚未初始化。要正确初始化它,请执行以下操作:
public class OutgoingMessage {
public static SMPPSession session = new SMPPSession();
}
答案 5 :(得分:0)
您尚未初始化静态变量..这就是原因..
实际上你已经在main()
中完成了,但这确实不会影响你的输出..因为你的主要永远不会被运行..你可以在声明的地方初始化它..
public static SMPPSession session = new SMPPSession();
在主要方法之前.. 但将它作为静态变量没有意义..
您应该将其声明为实例变量,并使用Constructor
为您创建的每个实例初始化它。