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

时间:2019-09-26 08:54:41

标签: java

我为解决该错误进行了大量搜索,但似乎没有合适的解决方案。

我正在使用 Swing 构建简单的界面。此界面具有 JTextField ,用户必须在其中输入一个数字,该数字必须为正数才能启用保存按钮。

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

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

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

这是JTextField的代码 quantityTextBox:

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.parseInt更改为Double.parseDouble,但没有任何改变。

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

  

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

所以我尝试将keyReleased()keyPressed()一起更改,但现在我有了:

  

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

和:

  

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

所以我尝试使用keyTyped(),但仍然有相同的错误。

我真的不知道该怎么解决。

如果不清楚,请问我,对不起我的英语。 谢谢你。

1 个答案:

答案 0 :(得分:1)

只需使用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时您还没有期望- 。因为JTextField对用户可以输入的内容没有任何限制,所以绝对不能肯定textQuantity.getText()将返回Integer.parseInt()可以解析而不会抛出NumberFormatException的值。做好准备比出乎意料的要好,尤其是因为“惊讶”意味着未捕获的异常,因此程序突然死亡。