【问题标题】:KeyListener NullPointerAcception in my UI, why is JTextField.setText(""); not working?我的 UI 中的 KeyListener NullPointerAcception,为什么是 JTextField.setText("");不工作?
【发布时间】:2019-04-10 15:46:56
【问题描述】:

我一直在尝试制作这个文本游戏,其中用户有一个用户界面,他们只需在 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 获取文本并将其设置为临时字符串 text,然后擦除 JTextField 并将文本添加到 JTextArea。当然,这并没有发生,我得到的只是 NullPointerException 错误。任何帮助将不胜感激。这段代码多年来一直是我的眼中钉。

【问题讨论】:

标签: java swing nullpointerexception keylistener


【解决方案1】:
input.setText("");

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

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

private JTextArea input;

在你的构造函数中:

JTextField input=new JTextField("");

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

input=new JTextField("");

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 2015-12-16
    • 1970-01-01
    • 2011-11-24
    • 2015-03-06
    • 2017-09-06
    • 2012-01-11
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多