Java KeyListener NullPointerAcception在我的UI中,为什么是JTextField.setText(“设置”);不工作?

Java KeyListener NullPointerAcception在我的UI中,为什么是JTextField.setText(“设置”);不工作?,java,swing,nullpointerexception,keylistener,Java,Swing,Nullpointerexception,Keylistener,我一直在尝试制作这个文本游戏,用户有一个用户界面,他们只需在JTextField中键入命令,游戏就在JTextField中进行。经典的RPG风格。我在使用KeyListener尝试查看用户何时按下“enter”键时遇到了一些问题,该键将用户所说的内容放入JTextArea,然后清除JTextField。它在没有问题之前就已经工作了,JTextField将被清除,一切都很完美。然后在我尝试添加JTextArea.append(text)之后;在混乱中,一切都破裂了。即使去掉它,函数现在也会出现相同

我一直在尝试制作这个文本游戏,用户有一个用户界面,他们只需在JTextField中键入命令,游戏就在JTextField中进行。经典的RPG风格。我在使用KeyListener尝试查看用户何时按下“enter”键时遇到了一些问题,该键将用户所说的内容放入JTextArea,然后清除JTextField。它在没有问题之前就已经工作了,JTextField将被清除,一切都很完美。然后在我尝试添加JTextArea.append(text)之后;在混乱中,一切都破裂了。即使去掉它,函数现在也会出现相同的错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at UITest.keyReleased(UITest.java:17)
正如我之前所说的,我已经试着把它移回原来的状态,但这不起作用。我还查找了这个问题,有些人说我需要添加一个KeyEvent.consume();所以我也试过了,但没用。同样的错误继续发生

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class UITest implements KeyListener{
    private JFrame main;
    private JTextArea mainText;
    private JTextArea input;

    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode()== KeyEvent.VK_ENTER) {
            e.consume();
            System.out.println("pressed");
            String text = input.getText();
            input.setText("");
            mainText.append(text);
        }
    }
    public void keyTyped(KeyEvent e) {}

    public void actionPerformed(ActionEvent e) {}

    public UITest(){
        main=new JFrame("Text Game");
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setSize(1366,768);
        mainText=new JTextArea("Testing");
        mainText.setBounds(10,100,1366,728);
        mainText.setEditable(false);
        JTextField input=new JTextField("");
        input.setBounds(10,700,1366,20);
        input.addKeyListener(this);
        main.add(input);
        main.add(mainText);
        main.pack();
        main.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new UITest();
            }
        });
    }
}
我希望这只是从JTextField获取文本并将其设置为临时字符串text,然后删除JTextField并将文本添加到JTextArea。当然,这并没有发生,我得到的只是一个NullPointerException错误。任何帮助都将不胜感激。多年来,这段代码一直是我心中的一根刺

input.setText("");
这是导致错误的一行,因为您尚未将
input
初始化为值

请注意,您有两个同名的变量。在类中,有一个字段声明为:

private JTextArea input;
在构造函数中,您有:

JTextField input=new JTextField("");
因为这是构造函数中的局部变量,所以其他方法无法使用它。把这行改成

input=new JTextField("");
这是导致错误的一行,因为您尚未将
input
初始化为值

请注意,您有两个同名的变量。在类中,有一个字段声明为:

private JTextArea input;
在构造函数中,您有:

JTextField input=new JTextField("");
因为这是构造函数中的局部变量,所以其他方法无法使用它。把这行改成

input=new JTextField("");

第17行在哪里?参见&第17行在哪里?参见&