簡體   English   中英

在Java中另一個類中訪問靜態變量時發生NullPointerException

[英]NullPointerException when accessing static variable in another class in 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)

知道我想念什么嗎?

謝謝

薩蒂亞

當然-您正在使用OutgoingMessage.session ,除非您運行OutgoingMessage.main否則它將為null。 並不是像在任何地方都自動調用main方法一樣,這只是應用程序的入口。

我建議不要嘗試使用靜態初始化程序或類似方法,而應嘗試避免使用靜態變量。

為什么OutgoingMessage具有靜態session變量才有意義? 我希望兩者能夠協同工作,而不是由另一個構成……例如,我可以想象:

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

甚至:

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

OutgoingMessage.session在您呼叫的位置為null

if(OutgoingMessage.session.getSessionState()

結果為NullPointerException

確保在執行if(OutgoingMessage.session.getSessionState()之前執行OutgoingMessagemain方法

除非您將OutgoingMessage用作主類,否則在此處定義main方法是沒有意義的,這會造成更多混亂。

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

if(OutgoingMessage.session.getSessionState().toString().equals("Connected")) //Line 44 ...

您在OutgoingMessage中缺少靜態的getter方法,並且只需要一個main方法。

問題是,當您使用OutgoingMessage.session它尚未初始化。 要正確初始化它,請執行以下操作:

public class OutgoingMessage {
    public static SMPPSession session = new SMPPSession();
  }

您尚未初始化靜態變量。這就是原因。

實際上,您已經在main()完成了該操作,但這實際上不會影響您的輸出。.因為您的main將永遠不會運行。.您只能在聲明的位置對其進行初始化。

public static SMPPSession session = new SMPPSession();

在主方法之前..但是將其作為靜態變量沒有任何意義。

您應該將其聲明為實例變量,並為每個使用Constructor創建的實例初始化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM