2011-01-20 3 views
0

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

Вот мой код:

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); вызывает исключение нулевого указателя.

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

ответ

2

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

txtScreen = new JTextField(); 
+0

Это именно то, что мне нужно. Теперь я не могу получить txtScreen.setText («+ результат»); для установки текста. Есть идеи? –

+0

Как вы изменили код и что такое ошибка, которую вы получаете? – fmucar

+0

Нет ошибок. Он работает нормально, он просто не меняет txtScreen. Я установил свой результат var var 5. Так что, если я распечатаю результат, он напечатает 4, но текст txtScreen не изменится. Вот мои две строки: –

1

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

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

txtScreen = new JTextArea(); 

попытка разместить код, где вы инициализировать его.

0

Существует 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

Смежные вопросы