Установка переменной, но она возвращает ноль - PullRequest
0 голосов
/ 17 декабря 2011

Хорошо, поэтому я пытался решить эту проблему часами, но я просто не могу найти причину, по которой это происходит. Итак, у меня есть три занятия, в одном:

public void loadFile() throws FileNotFoundException, IOException {
    config = new File(m.getUser() + "AppData/Roaming/pseudpixel/config.cfg");
    FileReader fr = new FileReader(m.getUser() + "AppData/Roaming/pseudopixel/config.cfg");
    BufferedReader br = new BufferedReader(fr);

    while((temp = br.readLine()) != null) {
        if(temp.startsWith("screenName")) {
            tempCache = temp.split(":");
            v.setScreenName(tempCache[1]);
        } else if(temp.startsWith("screenWidth")) {
            tempCache = temp.split(":");
            v.setScreenWidth(Integer.parseInt(tempCache[1]));
        } else if(temp.startsWith("screenHeight")) {
            tempCache = temp.split(":");
            v.setScreenHeight(Integer.parseInt(tempCache[1]));
        } else if(temp.startsWith("debug")) {
            tempCache = temp.split(":");
            v.setDebug(tempCache[1]);
        }

        br.close();
    }
}

Я устанавливаю значения в классе значений:

public void setScreenName(String s) {
    screenName = s;
    m.log("ScreenName Set:   " + getScreenName() + "\n");
}

public String getScreenName() {
    return screenName;
}

public void setScreenWidth(int i) {
    screenWidth = i;
    m.log("ScreenWidth Set:  " + getScreenWidth() + "\n");
}

public Integer getScreenWidth() {
    return screenWidth;
}

public void setScreenHeight(int i) {
    screenHeight = i;
    m.log("ScreenHeight Set: " + getScreenHeight() + "\n");
}

public Integer getScreenHeight() {
    return screenHeight;
}

public void setDebug(String b) {
    if(b.equals("true")) {
        debug = true;
        m.log("Debug Set:        " + getDebug() + "\n");
    } else {
        debug = false;
        m.log("Debug Set:        " + getDebug() + "\n");
    }
}

public boolean getDebug() {
    return debug;
}

и все нормально работает, по моим данным. Но когда я пытаюсь получить значение с помощью метода get из этого класса, он возвращает исключение nullpointer. В основном все значения возвращаются нулевыми, когда я вызываю метод get из внешнего класса. Похоже, они делают это сразу после завершения метода loadFile().

Очень жаль, как глупо все это звучало. Я не знаю, о чем я думал, когда писал это. Я все исправил одной строкой кода.

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

Я заметил, что ваш br.close() находится в цикле while.Есть ли шанс, что это как-то связано?

2 голосов
/ 17 декабря 2011

Вы не можете set значение с помощью метода get, это парадоксально. Если, конечно, вы не ненавидите людей, читающих ваш код, и используете get для установки и set для получения переменных.

Я думаю, что вы пытаетесь установить какое-то другое значение, используя методы get этого класса, в этом случае вы должны опубликовать их и создать SSCCE . Но так как вы не опубликовали этот код, я не могу помочь здесь.

Однако не похоже, что у вас есть constructor для инициализации всех значений:

public Value() {
  screenName = "";
  screenWidth = 0;
  screenHeight = 0;
  debug = false;
}

Смысл constructor состоит в том, чтобы сделать все ваши значения не null. Поскольку у вас его нет, все по-прежнему null.

Затем, когда вы инициализируете v (при условии, что его тип Value), вы вызываете конструктор так:

Value v = new Value();

Конструктор также может принимать аргументы для предварительной установки значений на то, что выбрано экземпляром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...