【问题标题】:I have written right code i think but not getting output in text area我写了我认为正确的代码,但没有在文本区域中得到输出
【发布时间】:2017-05-24 14:12:43
【问题描述】:

代码是用 netbeans 8.2 编写的

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                    
  int a=Integer.parseInt(jTextField1.getText());
  int b=Integer.parseInt(jTextField2.getText());
  int c=a+b;
  jTextArea1.setText("addition is"+c);
}

错误就这样出现了——请告诉 wats 错误——

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "          3"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:569)
    at java.lang.Integer.parseInt(Integer.java:615)
    at addsf.jButton1ActionPerformed(addsf.java:95)
    at addsf.access$000(addsf.java:11)

还有更多内容。 请指导。

【问题讨论】:

  • 你的String有一个空格,考虑在上面调用trim()
  • 你在“3”中有一个前导空格
  • 你有没有做任何事情来理解这个问题?
  • 以后,请尝试更严格地阅读错误消息,因为它通常会告诉您确切的问题、位置和原因,就像它在这种情况下所做的那样。请注意,如果这是我的 GUI,我会尝试通过向用户展示不允许错误输入的输入组件(例如 JSpinner、JFormattedTextField 或使用 DocumentFilter 的 JTextField)来让事情变得更加愚蠢只允许数字。

标签: java


【解决方案1】:

您正在尝试解析一个整数,它应该只是数字,没有别的。试试这个:

jTextField1.getText().trim())

这将基本上删除字符串前后的所有空格。 " 2 " 变为 "2"

但是,如果不是一系列数字,这也容易出错,在这种情况下,您应该使用 try/catch 块。

【讨论】:

  • 我来自印度,工作了 15 年 ..我是这个领域的新手,感谢您的帮助,但您能告诉我为什么我们必须使用 trim() 吗???
  • 在我的另一台笔记本电脑上,如果我编写与上面写的相同的代码,它可以工作,但在其他笔记本电脑上它不会......你能回答吗?
  • 无法说明为什么字符串中有多余的空格,但是您应该始终将输入视为容易出错。
  • 我无法在字符串中找到您告诉我的空格,请告诉我它在哪里?
  • 我自己没有给空格
【解决方案2】:

异常消息告诉您,您的输入有问题:

java.lang.NumberFormatException:对于输入字符串:“3”

如果您查看字符串,您可以发现 3 前面的空格,这是导致异常的原因。

int a = Integer.parseInt(" 3"); // leading white-space causes error
int b = Integer.parseInt("3"); // OK

要从您的输入中删除可能的空格,您可以使用方法String#trim();,它返回新的String,不带前导或尾随空格。

int c = Integer.parseInt(" 3".trim());

或者您可以使用String.replaceAll(regex, replacement);,它通过指定的替换替换与给定正则表达式匹配的所有字符串序列。

int d = Integer.parseInt(" 3".replaceAll("\\s", "")); // \\s = white-space

考虑使用JFormattedTextField 而不是JTextFieldJTextField 接受您在其中写入的任何内容(带有字母/空格的数字),而在 JFormattedTextField 上,您可以应用仅接受数字的掩码,因此用户将无法插入字母。这是example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 2021-06-04
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多