java - 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.parseInt
,Double.parseDouble
但没有任何改变。
编辑: 感谢汤姆,现在我知道了:
问题不在于 -5,问题在于您在每次按键时检查数字,因此它会尝试检查 - 没有任何数字。
所以我尝试改变keyReleased()
withkeyPressed()
但现在我有:
java.lang.NumberFormatException:对于输入字符串:“”
和:
java.lang.NumberFormatException:对于输入字符串:“-”
所以我尝试keyTyped()
但仍然有同样的错误。
我真的不知道如何解决它。
如果有不清楚的地方,请问我,对不起我的英语。提前谢谢你。
解决方案
只需使用一个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
。因此,做好准备总比惊讶好,尤其是因为“惊讶”意味着未捕获的异常,因此您的程序会突然而严峻地死亡。
推荐阅读
- python - 当我尝试使用漂亮的汤打印标签时显示 IdentationError
- nix - 运行 Nix 安装的 Mailhog
- node.js - 无法到达 localhost:PORT 在 Node.js 中创建并表达
- amazon-web-services - 如何根据区域限制 AWS 访问?
- java - Java:如何将类数据类型数组转换为字符串数组?
- redirect - 用户登录重定向
- angular - Jenkins 将 @tmp 工作区文件夹用于 firebase,但我的管道失败了
- python - 导入包含其他模块的模块时出现 Python 问题
- python - 在 python 中使用两个熊猫系列绘制均值和 SD 图
- tensorflow - 循环神经网络 (LSTM) 的 PCA - 我也应该将 PCA 用于目标变量吗?