0

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

知道我错过了什么吗?

谢谢

萨提亚

4

6 回答 6

6

当然-您正在使用OutgoingMessage.session,除非您运行,否则它将为空OutgoingMessage.main。这不像main方法会在任何地方自动调用 - 这只是应用程序的入口点。

我建议不要将其更改为使用静态初始化程序或类似的东西,而是尽量避免使用静态变量。

OutgoingMessage为什么有一个静态session变量有意义?我希望两者能够一起工作,而不是一个由另一个组成......例如,我可以想象:

SMPPSession session = new SMPPSession();
session.send(outgoingMessage);

甚至:

SMPPSession session = new SMPPSession();
outgoingMessage.sendInSession(session);
于 2012-10-02T18:15:15.907 回答
2

OutgoingMessage.sessionnull你打电话的地方

if(OutgoingMessage.session.getSessionState()

这导致NullPointerException.

确保在制作之前执行OutgoingMessagemain方法 if(OutgoingMessage.session.getSessionState()

除非你使用 OutgoingMessage 作为主类,否则在那里定义 main 方法是没有意义的,这更令人困惑。

于 2012-10-02T18:15:04.570 回答
1

您可以在OutgoingMessage.main(args);之前添加:

if(OutgoingMessage.session.getSessionState().toString().equals("Connected")) //Line 44 ...
于 2012-10-02T19:33:54.093 回答
0

你还没有初始化你的静态变量..这就是为什么..

实际上你已经做到了main(),但这真的不会影响你的输出。因为你的 main 永远不会运行。你只能在声明的地方初始化它。

public static SMPPSession session = new SMPPSession();

在 main 方法之前.. 但是将它作为静态变量是没有意义的..

您应该将其声明为实例变量并使用Constructor..为您创建的每个实例初始化它。

于 2012-10-02T18:17:25.767 回答
0

您在 OutgoingMessage 中缺少一个静态 getter 方法,而您只需要一个 main 方法。

于 2012-10-02T18:15:38.173 回答
0

问题是当你使用OutgoingMessage.session它时它还没有初始化。要正确初始化它,请执行以下操作:

public class OutgoingMessage {
    public static SMPPSession session = new SMPPSession();
  }
于 2012-10-02T18:16:28.097 回答