【问题标题】:Need to read input of two JTextfields after a button is clicked单击按钮后需要读取两个 JTextfields 的输入
【发布时间】:2011-05-03 01:39:41
【问题描述】:

我正在开发一个启动小程序的程序,该小程序将演示扩展欧几里得算法的执行方式。我有两个 JTextFields 值将被输入并需要被读取/转换为整数等。我在实际读取输入值开始时遇到了麻烦。

更新问题:
阅读第一个答案后,我对代码进行了更改。我没有使用 DocumentListener,而是按照建议在我的 actionPerformed 方法中做所有事情,但是当我尝试测试时,我仍然遇到错误。

这是我当前执行的操作:

public void actionPerformed(ActionEvent event) {
    System.out.println(event.getActionCommand());
    String quotient = "";
    nText = nField.getText();
    mText = mField.getText();

    if("Find GCD".equals(event.getActionCommand())){
        int nInt = Integer.parseInt(nText);
        int mInt = Integer.parseInt(mText);
        int q = mInt/nInt;
        quotient = (Integer.toString(q));
    }
    else quotient = "n/a";
    //NOT the gcd, just to see if this will display
    gcd.setText(quotient);
    gcd.setEditable(false);
}

(注意:gcd 是另一个 JTextField,但只需要显示结果)

现在点击我的按钮后,我在控制台中打印出这些错误:

线程“AWT-EventQueue-1”中的异常 java.lang.NullPointerException 在 EuclidApplet.actionPerformed(EuclidApplet.java:87) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源) 在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.setPressed(未知来源) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源) 在 java.awt.Component.processMouseEvent(未知来源) 在 javax.swing.JComponent.processMouseEvent(未知来源) 在 java.awt.Component.processEvent(未知来源) 在 java.awt.Container.processEvent(未知来源) 在 java.awt.Component.dispatchEventImpl(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.processMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.dispatchEvent(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Window.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$000(未知来源) 在 java.awt.EventQueue$1.run(未知来源) 在 java.awt.EventQueue$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知来源) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue$2.run(未知来源) 在 java.awt.EventQueue$2.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)

我在设置的行收到 NullPointerException

nText = nField.getText();

但我仍然不确定为什么我无法获取插入到我的 JTextField 中的文本。我发现的每个示例都表明这应该有效,但我无法做到。谢谢。

【问题讨论】:

  • 您为什么不简单地阅读 actionPerformed 方法中的文本,而不是通过 DocumentListener 的卷积以及随之而来的所有内容?

标签: java swing jtextfield


【解决方案1】:

我在设置 nText = nField.getText(); 的那一行收到 NullPointerException

这可能是因为您将 nField 定义为类变量和局部变量。问题是您试图引用为空的类变量。

解决办法是去掉类变量。

【讨论】:

    【解决方案2】:

    解决方案:不要使用 DocumentListener,因为这不仅是矫枉过正,而且是错误的。如果您想要按钮按下时的值,则在按钮的操作中获取值,而不是从 DocumentListener 中获取。如果您从按钮的动作侦听器中获取值不起作用,那么让我们找出您做错了什么并帮助您解决该错误。

    事实上,我看到你曾经尝试过这样做,但将其注释掉:

    System.out.println(event.getActionCommand());
    System.out.println(event.getID());
    String quotient = "";
    //nText = nField.getText();  // **** here ****
    //mText = mField.getText();  // **** and here ****
    

    所以取消注释这些行并摆脱您的 DocumentListener。

    我在下面看到的一个问题是您正在尝试使用 == 运算符检查字符串是否等效:

    if("Find GCD" == event.getActionCommand()){
        int nInt = Integer.parseInt(nText);
        int mInt = Integer.parseInt(mText);
        int q = mInt/nInt;
        quotient = (Integer.toString(q));
    }
    

    不要这样做,因为这有时会奏效,有时会失败。您并不真正关心这两个字符串是否相同 object(这是 == 运算符测试的内容),而是您想知道它们是否包含相同的字符串数据。为此,您应该使用 equals 或 equalsIgnoreCase 方法:

    if ("Find GCD".equals(event.getActionCommand())) {
        int nInt = Integer.parseInt(nText);
        int mInt = Integer.parseInt(mText);
        int q = mInt/nInt;
        quotient = (Integer.toString(q));
    }
    

    【讨论】:

    • 太棒了,谢谢!我不敢相信我使用 == 而不是 .equals,我比这更清楚。我会试试这个,看看效果如何。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2015-01-21
    相关资源
    最近更新 更多