尽管努力阅读如何生成Null Pointer Exceptions,但我完全不知道这个错误是如何在我的代码中生成的。
我认为这不会直接影响我的代码,因为我可以捕获异常,但在此之前,我仍然想了解有关错误的更多信息。
我生成错误的部分代码,我打开一个新的Input对话框并等待用户的输入。如果用户取消输入对话框,则只需关闭对话框即可。但是,每次取消时都会给我一个错误。
以下是代码:
String newInput = JOptionPane.showInputDialog(null, "Your current holdings are: "
+ cable.getHoldings(), "Edit Holdings", JOptionPane.CANCEL_OPTION);
if (newInput.isEmpty())
{
//Error generated here
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
else
{...}
仅当用户按下输入对话框上的“确定”按钮时,才会触发消息对话框。否则,如果用户取消或退出输入对话框,则会生成空指针异常错误。
有人介意帮助我,让我知道为什么会这样吗?
谢谢。
答案 0 :(得分:4)
返回:用户的输入,或null表示用户取消了输入
如果用户取消对话框,则retruns
null
来自showInputDialog
源代码
if (value == UNINITIALIZED_VALUE) {
return null;
}
解决方案:在做任何事情之前进行无效检查
if (newInput==null || newInput.isEmpty())
您不需要newInput.isEmpty()
,因为它会检查字符串的长度,因此即使用户输入的空格长度为1,如果取消输入,长度也为null
,因此无效检查仅足以检查一些输入。
改进:您可以使用regex
验证您的输入,是否为数字,如此
if (newInput==null || !newInput.matches("\\d+"))
{
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
\\d+
检查输入应包含至少一个或多个整数位。
答案 1 :(得分:2)
我理解的问题是你在null( newInput )值上检查 isEmpty()方法,这将抛出空指针异常。你应该检查以下内容:
而不是:
quandl has no get attribute
执行此操作:
if (newInput.isEmpty())
{
//Error generated here
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
这应该可以正常工作。希望这有助于...... !!!