我为解决该错误进行了大量搜索,但似乎没有合适的解决方案。
我正在使用 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()
,但仍然有相同的错误。
我真的不知道该怎么解决。
如果不清楚,请问我,对不起我的英语。 谢谢你。
答案 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
的值。做好准备比出乎意料的要好,尤其是因为“惊讶”意味着未捕获的异常,因此程序突然死亡。