将getText()函数与JTextField一起使用时会出现Null指针异常

时间:2019-01-20 07:46:02

标签: java jframe jtextfield

我正在为JTextField对象创建容器类,但是每当尝试在文本字段中获取文本时,我都会遇到麻烦。

class myTextField{
String defaultText;
String currentText = "";
JTextField field;
int xPos;
int yPos;
int xSize;
int ySize;

myTextField(JFrame frame, String newDefaultText, int newXPos, int newYPos, int newXSize, int newYSize){
    defaultText = newDefaultText;
    xPos = newXPos;
    yPos = newYPos;
    xSize = newXSize;
    ySize = newYSize;

    JTextField label = new JTextField(defaultText);
    frame.add(label);
    label.setBounds(xPos, yPos, xSize, ySize);
}

public void setText(String text) {
    this.currentText = field.getText();
    if(text == "") {
        this.currentText = this.defaultText;
    }
    this.currentText = text;
}

public String getText() {
    System.out.println(field.getText());
    this.currentText = field.getText();
    return this.currentText;

    }
}

每当我使用此类的getText()函数时,就会出现此错误:

Exception in thread "main" java.lang.NullPointerException
at Examples.myTextField.getText(Example_312.java:182)
at Examples.Example_312.updateFrame(Example_312.java:81)
at Examples.Example_312.main(Example_312.java:49)

不幸的是,该错误的描述性不是很高,因此我很难找到我的代码出了什么问题。我知道当我调用“ field.getText();”时失败了,但是我不知道为什么。如果有人可以向我解释或提供解决方案,我将不胜感激!

2 个答案:

答案 0 :(得分:3)

在您的myTextField构造函数中,我假设您想初始化JTextField field;实例变量,但是您创建了一个 local 变量{{1} }。

我相信您应该将构造函数中的JTextField label = new JTextField(defaultText);更改为:

JTextField label = new JTextField(defaultText);

然后在病房中,如果您调用吸气剂 field = new JTextField(defaultText); frame.add(field); field.setBounds(xPos, yPos, xSize, ySize); ,您将不会遇到任何getText()

答案 1 :(得分:1)

字段JTextField field从未初始化。您必须在对其上调用任何方法之前为this.field分配一个值(尽管JTextField label是局部变量,但您是为label做的)。