![](/img/trans.png)
[英]Getting NullPointerException when accessing spinner of another class
[英]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()
之前執行OutgoingMessage
類main
方法
除非您將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.