ข้อยกเว้นตัวชี้ Null บนตัวตั้งค่า getter ใน java

ฉันมีคลาส getter setter ชื่อ SharedData.java ฉันได้รับข้อยกเว้นตัวชี้ null เมื่อฉันจะบอกเป็นนัยในโค้ดของฉัน นี่คือคลาส SharedData :

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);

ใครสามารถช่วยฉันในเรื่องนี้ได้บ้าง? ขอบคุณ .


person Fahim Ahmed    schedule 12.09.2012    source แหล่งที่มา
comment
ฉันได้รับข้อยกเว้นตัวชี้ null =› อ่านการติดตามสแต็ก ค้นหาบรรทัดที่เกี่ยวข้องในโค้ดของคุณ ค้นหาว่ามีอะไรผิดปกติในบรรทัดนั้น   -  person assylias    schedule 12.09.2012


คำตอบ (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;
}
person Kumar Vivek Mitra    schedule 12.09.2012
comment
ฉันจะขอบคุณบุคคลที่เพิ่งลงคะแนนคำถามของฉัน แม้ว่านี่จะเป็นคำถามที่ถูกต้องก็ตาม...... - person Kumar Vivek Mitra; 12.09.2012
comment
หลังจากทำเช่นนี้ เมื่อฉันพยายามเริ่มต้น sharedData มันทำให้เกิดข้อผิดพลาดต่อไปนี้: Constructor SharedData() is not displays - person Fahim Ahmed; 12.09.2012
comment
ขออภัย ขอโทษด้วย! มันได้ผล ฉัน inilized มันอีกครั้งในรหัสของฉันอย่างผิดพลาด ขอบคุณมาก . :-) - person Fahim Ahmed; 12.09.2012
comment
@FahimAhmed ยินดีต้อนรับ ............ แต่เป็นเพียงคำขอ .... พยายามทำความเข้าใจและรันโค้ดก่อนที่คุณจะข้ามไปสู่ข้อสรุปอย่างกะทันหัน ... ที่ช่วยฉัน ... และฉันแน่ใจว่าจะช่วยทุกคนที่ตอบสนองต่อสถานการณ์ แทนที่จะตอบสนอง...... ขอบคุณอีกครั้ง - person Kumar Vivek Mitra; 12.09.2012

SharedData.getInstance();

ส่งกลับ null ต่อมาคุณกำลังพยายามเรียกใช้วิธีการ:

sharedData.setSrc_latitude(latitude);

ซึ่งผิดกฎหมายเนื่องจากการอ้างอิงถึงวัตถุยังคงเป็น null

person Ivan Koblik    schedule 12.09.2012

คุณไม่ได้สร้างอินสแตนซ์ของคลาส ดังนั้น getInstance() จะส่งกลับ null

เมื่อเริ่มชั้นเรียนของคุณ ให้แทนที่ :

private static SharedData instance = null;

by :

private static SharedData instance =  new SharedData() ; // creates a new instance
person Denys Séguret    schedule 12.09.2012
comment
sharedData.setSrc_latitude(ละติจูด); - person Fahim Ahmed; 12.09.2012

เปลี่ยน private static SharedData instance = null;

to private static SharedData instance = this;

และทำให้ชั้นเรียนของคุณคงที่

public static class SharedData {

นอกจากนี้ทำให้ผู้ตั้งค่า getters คงที่ ..

person Vinay W    schedule 12.09.2012
comment
ฮ่าฮ่า ใช่มั้ย? หรือคุณหมายถึงเพียง 'คำตอบที่ไม่ดี'? ฉันก็คิดว่าอย่างนั้น. ฉันไม่เคยทำงานกับ c# มาก่อนเลย - person Vinay W; 12.09.2012

แม้จะใช้ singleton pattern คุณก็ควรสร้างอินสแตนซ์ของวัตถุ SharedData อย่างน้อยหนึ่งครั้ง

ลองสิ่งนี้

SharedData sharedData = new SharedData();  
       sharedData = SharedData.getInstance();
       sharedData.setSrc_latitude(latitude);
   sharedData.setEnd_longitude(longitude);
person Cristiano Fontes    schedule 12.09.2012