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ていない限り null になります。メソッドがどこでも自動的に呼び出されるわけではありません。これは、アプリケーションのエントリ ポイントにすぎません。OutgoingMessage.mainmain

これを変更して静的初期化子などを使用する代わりに、静的変数を回避するように努めることをお勧めします。

なぜ静的変数OutgoingMessageを持つことが理にかなっているのですか? session2 つが一緒に機能することを期待します。一方が他方で構成されているわけではありません...たとえば、次のように想像できます。

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

あるいは:

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

OutgoingMessage.sessionあなたがnull呼んでいる場所にあります

if(OutgoingMessage.session.getSessionState()

結果はNullPointerException.

作る前にOutgoingMessageクラスmainメソッドが実行されて いることを確認してください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

OutgoingMessage に静的 getter メソッドがありません。必要なメイン メソッドは 1 つだけです。

于 2012-10-02T18:15:38.173 に答える
0

OutgoingMessage.session問題は、まだ初期化されていないときに使用することです。正しく初期化するには、次のようにします。

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

あなたは静的変数を初期化していません..それが理由です..

実際には でそれを行いましmain()たが、それは実際には出力に影響しません..メインは決して実行されないため..宣言の場所でのみ初期化できます..

public static SMPPSession session = new SMPPSession();

メインメソッドの前..しかし、それを静的変数として持つのは意味がありません..

Constructorインスタンス変数として宣言し、 ..を使用して作成するインスタンスごとに初期化する必要があります。

于 2012-10-02T18:17:25.767 に答える