2012-01-24 100 views
0

我在更新文本區域時遇到問題。Swing中的JTextArea問題

gui.java聲明textArea

JTextArea textArea; 

我進入GUI ..

public void startGUI() { 
     // These are all essential GUI pieces 
     JLabel jLabInstruction, jLaberror; 
     JLabel copyright = new JLabel(""); 
     JTextField uI = new JTextField(""); 
     JTextArea textArea = new JTextArea(""); 
     JButton jbtnSubmit; 

     final JFrame jfrm = new JFrame("app name!"); 
     jfrm.setLayout(new FlowLayout()); 
     jfrm.setSize(300, 300); 
     jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     textArea = new JTextArea(5, 20); 
     textArea.setEditable(false); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     jLabInstruction = new JLabel("SYSTEM: Please type in a command: "); 
     jbtnSubmit = new JButton("Submit"); 
     jLaberror = new JLabel(""); 
     textArea.setMargin(new Insets(10,10,10,10)); 

     jfrm.add(jLaberror); 
     jfrm.add(textArea); 
     jfrm.add(jLabInstruction); 
     jfrm.add(uI); 
     jfrm.add(jbtnSubmit); 
     jfrm.add(new JSeparator(SwingConstants.HORIZONTAL)); 
     jfrm.add(copyright); 
     jfrm.setVisible(true); 
    } 

而且我有寫入上述textArea的方法:

public void writeToTextArea(String userInputText) { 
     textArea.append("\nSYSTEM: " 
       + userInputText); 
    } 

另外,在tasks.java中,我可以調用最後一個方法:

gui.writeToTextArea("PROGRAM STARTED!"); 

我的問題是,文本區域字段沒有更新。什麼都沒有輸入。我想這是因爲它找不到textArea是什麼。我得到一個:

Exception in thread "main" java.lang.NullPointerException 
+0

爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

6

你在你的startGUI功能,這隱藏着一流水平textArea聲明呼籲textArea另一個變量。這就是爲什麼當您嘗試在程序中稍後寫入文本區域時獲得NPE的原因。

JTextArea textArea; 

public void startGUI() { 
    JLabel jLabInstruction, jLaberror; 
    JLabel copyright = new JLabel(""); 
    JTextField uI = new JTextField(""); 
    JTextArea textArea = new JTextArea(""); //<-- Your hiding your class variable here 

    // ... rest of your code 
} 
+0

我試過評論這條線,它似乎不工作。 – droidus

+1

不要評論這條線。只需停止重新聲明變量。又名'textArea = new JTextArea(「」);'。 – Perception

+0

+1。 @droidus,你不能註釋掉這一行,因爲你需要創建文本區域。 – camickr