取消JOptionPane.showMessageDialog时出现空指针异常

时间:2016-12-21 06:04:23

标签: java nullpointerexception null joptionpane

尽管努力阅读如何生成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
{...}

仅当用户按下输入对话框上的“确定”按钮时,才会触发消息对话框。否则,如果用户取消或退出输入对话框,则会生成空指针异常错误。

有人介意帮助我,让我知道为什么会这样吗?

谢谢。

2 个答案:

答案 0 :(得分:4)

From docs

  

返回:用户的输入,或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!");
}

这应该可以正常工作。希望这有助于...... !!!