java - 取消 JOptionPane.showMessageDialog 时的空指针异常

标签 java nullpointerexception null joptionpane

尽管努力阅读如何生成空指针异常,但我完全不知道这个错误是如何在我的代码中生成的。

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

在生成错误的部分代码中,我正在打开一个新的输入对话框并等待用户输入。如果用户取消输入对话框,它只是意味着关闭对话框,它确实在其中。但是,每次我取消时它都会给我一个错误。

代码如下:

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
{...}

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

有人介意帮助我并告诉我为什么会这样吗?

谢谢。

最佳答案

From docs

Returns: user's input, or null meaning the user canceled the input

所以它重新运行 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+ 检查输入应至少包含一位或多位整数。

关于java - 取消 JOptionPane.showMessageDialog 时的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41256166/

相关文章:

java - 为什么我随机选择的数字的输出包含重复项?

java - 尝试删除所有缓存时 Ehcache 中出现异常

pointers - 如何返回自定义错误而不导致 nil 值出现问题

java - 数组列表和空值

java - hibernate 异常 LockAcquisitionException : could not update

JAVA 智能卡客户端身份验证 - 慢 "init keystore"

android - 使用 dagger-2 在 fragment 中注入(inject)首选项时出现 NullPointerException

java - 解决 Java 中的 NullPointerException 问题 - 认为这是一个初始化问题,但找不到它

sql - 使用 sql - 在 select 语句中不为 null

java - 将 Char 转换为 Java KeyEvent KeyCode