Проблема с JTextArea в Swing - PullRequest
       5

Проблема с JTextArea в Swing

0 голосов
/ 24 января 2012

У меня проблемы с обновлением текстовой области.

Я заявляю textArea в gui.java:

JTextArea textArea;

Я запускаю графический интерфейс ..

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 

1 Ответ

6 голосов
/ 24 января 2012

Вы объявляете другую переменную с именем textArea в вашей функции startGUI, которая скрывает уровень класса 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...