首页 > 解决方案 > java.lang.NumberFormatException:对于输入字符串:“-”

问题描述

我搜索了很多来解决这个错误,但似乎没有合适的解决方案。

我正在使用Swing构建一个简单的界面。这个界面有一个JTextField用户必须在其中写一个数字,这个数字必须是正数才能启用保存按钮。

我希望如果用户输入一个数字> = 1,则将启用保存按钮,如果用户输入负数,则继续禁用。

我写了一个测试,用户尝试输入一个负数:

    @Test
    public void testWhenQuantityTextBoxIsNegativeNumberThenSaveButtonShouldBeDisabled() {
        window.textBox("quantityTextBox").enterText("-5");
        window.button(JButtonMatcher.withText("Save")).requireDisabled();
    }

这是JTextField数量文本框的代码:

textQuantity = new JTextField();
        KeyAdapter btnSaveEnabler = new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                btnSave.setEnabled(!(Integer.parseInt(textQuantity.getText()) < 1));
        }
};
textQuantity.addKeyListener(btnSaveEnabler);
textQuantity.setEnabled(true);
textQuantity.setName("quantityTextBox");

问题是,当我尝试将表示为字符串(“-5”)的负数转换为整数类型时,出现此错误:

线程“AWT-EventQueue-0”java.lang.NumberFormatException 中的异常:对于输入字符串:java.lang.NumberFormatException.forInputString 处的“-”(未知来源)

问题似乎是数字 5 之前的“-”号。

我知道问题是由 给出的, Integer.parseInt但我不知道如何解决它。

我试图改变Integer.parseIntDouble.parseDouble但没有任何改变。

编辑: 感谢汤姆,现在我知道了:

问题不在于 -5,问题在于您在每次按键时检查数字,因此它会尝试检查 - 没有任何数字。

所以我尝试改变keyReleased()withkeyPressed()但现在我有:

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

和:

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

所以我尝试keyTyped()但仍然有同样的错误。

我真的不知道如何解决它。

如果有不清楚的地方,请问我,对不起我的英语。提前谢谢你。

标签: java

解决方案


只需使用一个try语句来捕获任何NumberFormatException

KeyAdapter btnSaveEnabler = new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent e) {
            try {
                btnSave.setEnabled(!(Integer.parseInt(textQuantity.getText()) < 1));
            } catch (NumberFormatException nfe) {
                btnSave.setEnabled(false);
            }
    }
};

即使您没有预料NumberFormatException到用户输入-负数的首字母时,这也是一个好主意。因为 aJTextField对用户可以键入的内容没有任何限制,所以您永远不能绝对确定它textQuantity.getText()会返回一个Integer.parseInt()可以在不抛出 a 的情况下解析的值NumberFormatException。因此,做好准备总比惊讶好,尤其是因为“惊讶”意味着未捕获的异常,因此您的程序会突然而严峻地死亡。


推荐阅读