JTextField.setText () выбрасывая исключение NullPointerException - PullRequest
0 голосов
/ 20 января 2011

Я пытаюсь изучать Java, и я пытаюсь сделать простой калькулятор.По какой-то причине я получаю NullPointerException на моем TextField.setText().

Вот мой код:

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new CalcUI().setVisible(true);
        }
    });

    Calc c = new Calc();
    c.setVals(2,2,'+');
    result = c.doCalc();
    //need to setText(String.valueOf(c.doCalc()))
    txtScreen.setText(""+result);
    System.out.println(result);

}

И в моем втором классе Calc:

    //sets values from calc GUI to local class vars
public void setVals(double n1, double n2, char c){
    NUM1=n1;
    NUM2=n2;
    CHAR=c;
}

//do the math
public double doCalc(){
    switch (CHAR){
        case '+':
            RESULT = NUM1+NUM2;
            break;
    }

    return RESULT;
}

Хорошо ... так что я отправляю это values(2,2), это и c.doCalc() возвращает 4.Мой System.out.println(result) печатает 4, но мой txtScreen.setText(""+result); вызывает исключение нулевого указателя.

Любая помощь?

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Вам необходимо инициализировать поле перед его использованием.

 txtScreen = new JTextField();
1 голос
/ 06 мая 2011

Существует n существующая ошибка в Java, различные выпуски.В моем случае у меня есть build 1.6.0_25-b06.Строка, которую я передаю JTextPane.setText(), определенно не равна нулю, но я получаю NPE в пределах setText() - особенно при перезагрузке.Это HTML, и хитро, но изменение текста немного предотвращает NPE, но оставляет неприятное ощущение.

Существует обходной путь, опубликованный под названием HTMLEditorKit throws NullPointerException when reloaded. Обходной путь создания экземпляра (неиспользованного) ParserDelegate{} до того, как setText() заработал для меня.http://forums.oracle.com/forums/thread.jspa?threadID=1773568&tstart=0

1 голос
/ 20 января 2011

Вы не инициализировали txtScreen со значением.

вам нужно что-то вроде:

txtScreen = new JTextArea();

попробуйте опубликовать код, где вы его инициализируете.

...