繁体   English   中英

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

[英]KeyListener NullPointerAcception in my UI, why is JTextField.setText(“”); not working?

我一直在尝试制作此文本游戏,其中用户具有一个用户界面,他们只需在JTextField中键入命令,然后该游戏就会在JTextArea中播放。 经典的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中获取文本并将其设置为临时String文本,然后擦除JTextField并将文本添加到JTextArea。 当然,这没有发生,而我得到的只是NullPointerException错误。 任何帮助将不胜感激。 多年来,这段代码一直困扰着我。

input.setText("");

这是导致错误的行,因为您尚未将input初始化为值。

请注意,您有两个具有相同名称的变量。 在您的课程中,您有一个声明为的字段:

private JTextArea input;

在构造函数中,您具有:

JTextField input=new JTextField("");

由于这是构造函数中的局部变量,因此它不适用于其他方法。 将此行更改为

input=new JTextField("");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM