尽管努力阅读了如何生成零指针异常,但我实际上不知道此错误是如何在我的代码中生成的。
我认为这不会直接影响我的代码,因为我可以捕获例外,但是在这样做之前,我仍然想了解更多有关错误的信息。
我的代码的一部分是错误的,我正在打开一个新的输入对话框并等待用户的输入。如果用户取消输入对话框,则只是为了关闭对话框的操作。但是,每次取消时,这都会给我一个错误。
这是代码:
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
{...}
仅当用户按输入对话框上的"确定"按钮时,消息对话框才会触发。否则,如果用户取消或退出输入对话框,则会生成一个空指针异常错误。
有人介意帮助我,让我知道为什么会发生这种情况吗?
谢谢。
来自docs
返回:用户的输入或null表示用户取消输入
因此,它retruns
null
如果用户取消对话框
来自showInputDialog
源代码
if (value == UNINITIALIZED_VALUE) {
return null;
}
解决方案:做任何事情之前,请进行无效检查
if (newInput==null || newInput.isEmpty())
您不需要newInput.isEmpty()
,因为它检查字符串的长度,因此即使用户进入空间长度也将为1或长度为null
,如果输入取消,则无效检查仅足以检查某些输入。p> 改进:您可以使用 regex
来验证输入,无论是数字,是否像这个
if (newInput==null || !newInput.matches("\d+"))
{
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
\d+
检查输入应包含一个或多个整数数字。
我了解的问题是您在null( newInput )上检查 isempty()方法,它将投掷空指针异常。您应该在下面检查一下:
而不是:
if (newInput.isEmpty())
{
//Error generated here
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
这样做:
if (newInput == null)
{
//Error generated here
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
这应该很好。希望这会有所帮助...