2012-09-12 12 views
2

我有一個名爲SharedData.java的getter setter類。當我要在我的代碼中暗示它時,我得到空指針異常。這裏是SharedData類:java中的getter setter的空指針異常

public class SharedData { 
private static SharedData instance = null; 

public SharedData() { 
    // randomizeServers(); 
} 

// data to be shared 
private double src_latitude = -1; 
private double src_longitude = -1; 
private double end_latitude = -1; 
private double end_longitude = -1; 

//Getter-Setters 
public static SharedData getInstance() { 
    return instance; 
} 
public static void setInstance(SharedData instance) { 
    SharedData.instance = instance; 
} 

public double getSrc_latitude() { 
    return src_latitude; 
} 
public void setSrc_latitude(double src_latitude) { 
    this.src_latitude = src_latitude; 
} 
public double getSrc_longitude() { 
    return src_longitude; 
} 
public void setSrc_longitude(double src_longitude) { 
    this.src_longitude = src_longitude; 
} 
public double getEnd_latitude() { 
    return end_latitude; 
} 
public void setEnd_latitude(double end_latitude) { 
    this.end_latitude = end_latitude; 
} 
public double getEnd_longitude() { 
    return end_longitude; 
} 
public void setEnd_longitude(double end_longitude) { 
    this.end_longitude = end_longitude; 
} 

} 

這裏是我的代碼:

 SharedData sharedData ; 
     sharedData = SharedData.getInstance(); 
     sharedData.setSrc_latitude(latitude); 
    sharedData.setEnd_longitude(longitude); 

可有人請幫助我?謝謝 。

+2

*「我得到空指針異常」* =>讀取堆棧跟蹤,在代碼中找到相應的行,找到該行的錯誤。 – assylias

回答

5

從未初始化sharedData,所以它的價值是null,調用一個方法就可以得到你的程序墜毀。

我覺得你試圖用Singleton Pattern ....嘗試以下...

嘗試......

private static SharedData instance = new SharedData(); \\ Initialize here 

private SharedData() {  // Make it private.... 
    // randomizeServers(); 
} 

// data to be shared 
private double src_latitude = -1; 
private double src_longitude = -1; 
private double end_latitude = -1; 
private double end_longitude = -1; 

//Getter-Setters 
public static SharedData getInstance() { 
    return instance; 
} 
+0

我會永遠感謝那些只是低估了我的問題的人,即使這是正確的...... –

+0

這樣做之後,當我嘗試啓動sharedData時,它給出了以下錯誤: Constructor SharedData ()不可見。 –

+0

opps抱歉!有效 。我錯誤地在代碼中再次使用了它。非常感謝 。 :-) –

2

您不需要實例化該類,因此getInstance()返回null

在你的課程開始,替換:

private static SharedData instance = null; 

由:

private static SharedData instance = new SharedData() ; // creates a new instance 
+0

我仍然在同一行發生同樣的錯誤。在**什麼**行 –

+0

? –

+0

&添加靜態/最後它顯示非法修飾符。 –

3
SharedData.getInstance(); 

返回null。後來你要調用一個方法就可以了:

sharedData.setSrc_latitude(latitude); 

這是違法的作爲參照對象仍然null

1

即使使用singleton pattern,也應至少實例化對象SharedData一次。

試試這個

SharedData sharedData = new SharedData(); 
     sharedData = SharedData.getInstance(); 
     sharedData.setSrc_latitude(latitude); 
    sharedData.setEnd_longitude(longitude); 
1

變化private static SharedData instance = null;

private static SharedData instance = this;

,讓你的類的靜態

public static class SharedData {

而且,使吸氣setter方法靜態..

+0

這不是C#... –

+0

哈哈,是嗎?或者你的意思只是一個'不好的答案'?我也這麼認爲。我從來沒有使用C#,順便說一句。 –