在Java中访问另一个类中的静态变量时出现NullPointerException

时间:2012-10-02 18:13:55

标签: java

我试图在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)

知道我错过了什么吗?

由于

萨蒂亚

6 个答案:

答案 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之前执行mainif(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为您创建的每个实例初始化它。