-2

我正在为 Bukkit ( http://bukkit.org ) 开发一个插件,在验证它不为空之后,它在第二行给了我一个 NullPointerException

    String description = getConfig().getString("core.commands."+cmd+".description");
    if (!(description.isEmpty()))
          getCommand(cmd).setDescription(description);
    else 
          getLogger().warning("NO description assigned to: " + cmd);
    description = null;
4

3 回答 3

2

isEmpty()不同于null支票。isEmpty()检查是String空的String(这意味着"")。

你需要做类似的事情

if (description != null && !description.isEmpty())
于 2013-09-06T19:49:35.257 回答
2

您的代码!(description.isEmpty())不会验证它description不为空。为此,您需要description != null.

你的测试应该是:

if (description != null && !description.isEmpty()) ...
于 2013-09-06T19:49:51.977 回答
0

我怀疑问题在于if条件 - 而是在下面的陈述中。我将首先像这样重新格式化代码:

String description = getConfig().getString("core.commands." + cmd + ".description");
if (!description.isEmpty())
{
    getCommand(cmd).setDescription(description);
}
else
{
    getLogger().warning("NO description assigned to: " + cmd);
}

(我已经删除了该description = null;声明,因为它几乎可以肯定是不必要的。)

通过这种更改,您将能够更多地了解引发异常的原因。你可以更进一步:

String description = getConfig().getString("core.commands." + cmd + ".description");
if (!description.isEmpty())
{
    Command command = getCommand(cmd); // Or whatever type it is
    command.setDescription(description);
}
else
{
    getLogger().warning("NO description assigned to: " + cmd);
}

除此之外,当您现在在调试器中单步执行代码时(假设这甚至可行),您将能够判断是否command为 null(我怀疑它是)。如果您不能使用调试器,您至少可以添加日志记录。

(其他人已经建议检查是否descriptionnull,但听起来这不是问题,这就是为什么我建议问题可能出在if语句的正文中。)

于 2013-09-06T19:56:49.310 回答