取消JOptionPane.showMessageDialog时出现空指针异常
Null pointer exception when JOptionPane.showMessageDialog is cancelled
尽管努力阅读空指针异常是如何产生的,但我完全不知道这个错误是如何在我的代码中产生的。
我认为这不会直接影响我的代码,因为我可以捕获异常,但在此之前,我仍然想了解有关该错误的更多信息。
在我的代码中产生错误的部分,我正在打开一个新的输入对话框并等待用户输入。如果用户取消输入对话框,它只是意味着关闭对话框,它确实在其中。但是,每次我取消时它都会给我一个错误。
代码如下:
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
{...}
仅当用户按下输入对话框上的 'OK' 按钮时才会触发消息对话框。否则,如果用户取消或退出输入对话框,则会产生空指针异常错误。
有人介意帮助我并告诉我为什么会这样吗?
谢谢。
Returns: user's input, or null meaning the user canceled the input
所以 retruns
null
如果用户取消对话框
来自showInputDialog
源代码
if (value == UNINITIALIZED_VALUE) {
return null;
}
解决方案:在执行任何操作之前进行无效检查
if (newInput==null || newInput.isEmpty())
您不需要 newInput.isEmpty()
因为它会检查字符串的长度,因此即使用户输入 space 长度也将为 1,或者在取消的情况下长度将为 null
输入因此无效检查仅足以检查某些输入。
改进:您可以使用regex
来验证您的输入,是否为数字,像这样
if (newInput==null || !newInput.matches("\d+"))
{
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
\d+
检查输入应至少包含一位或多位整数。
我所理解的问题是您正在检查空值 (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!");
}
这应该可以正常工作。希望这有助于...!!!
尽管努力阅读空指针异常是如何产生的,但我完全不知道这个错误是如何在我的代码中产生的。
我认为这不会直接影响我的代码,因为我可以捕获异常,但在此之前,我仍然想了解有关该错误的更多信息。
在我的代码中产生错误的部分,我正在打开一个新的输入对话框并等待用户输入。如果用户取消输入对话框,它只是意味着关闭对话框,它确实在其中。但是,每次我取消时它都会给我一个错误。
代码如下:
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
{...}
仅当用户按下输入对话框上的 'OK' 按钮时才会触发消息对话框。否则,如果用户取消或退出输入对话框,则会产生空指针异常错误。
有人介意帮助我并告诉我为什么会这样吗?
谢谢。
Returns: user's input, or null meaning the user canceled the input
所以 retruns
null
如果用户取消对话框
来自showInputDialog
源代码
if (value == UNINITIALIZED_VALUE) {
return null;
}
解决方案:在执行任何操作之前进行无效检查
if (newInput==null || newInput.isEmpty())
您不需要 newInput.isEmpty()
因为它会检查字符串的长度,因此即使用户输入 space 长度也将为 1,或者在取消的情况下长度将为 null
输入因此无效检查仅足以检查某些输入。
改进:您可以使用regex
来验证您的输入,是否为数字,像这样
if (newInput==null || !newInput.matches("\d+"))
{
JOptionPane.showMessageDialog(null, "Please enter in a number!");
}
\d+
检查输入应至少包含一位或多位整数。
我所理解的问题是您正在检查空值 (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!");
}
这应该可以正常工作。希望这有助于...!!!