Исключение нулевого указателя при установке геттера в java

У меня есть класс установки getter с именем SharedData.java . Я получаю исключение нулевого указателя, когда собираюсь использовать его в своем коде. Вот класс 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
Я получаю исключение нулевого указателя => прочитайте трассировку стека, найдите соответствующую строку в вашем коде, найдите, что не так в этой строке.   -  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() не виден. - person Fahim Ahmed; 12.09.2012
comment
оппс извините! это сработало . Я по ошибке снова включил его в свой код. Большое спасибо . :-) - 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 {

Кроме того, сделайте геттеры-сеттеры статическими.

person Vinay W    schedule 12.09.2012
comment
хаха, это? или вы имеете в виду просто «плохой ответ»? я тоже так думаю. я никогда не работал с С#, кстати. - 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