null指针异常时,joptionpane.showmessagedialog被取消



尽管努力阅读了如何生成零指针异常,但我实际上不知道此错误是如何在我的代码中生成的。

我认为这不会直接影响我的代码,因为我可以捕获例外,但是在这样做之前,我仍然想了解更多有关错误的信息。

我的代码的一部分是错误的,我正在打开一个新的输入对话框并等待用户的输入。如果用户取消输入对话框,则只是为了关闭对话框的操作。但是,每次取消时,这都会给我一个错误。

这是代码:

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!");
}

这应该很好。希望这会有所帮助...

相关内容

  • 没有找到相关文章

最新更新