JavaMail message.getSubject().equals 给出 NullPointerException

标签 java if-statement nullpointerexception jakarta-mail equals

我在使用 JavaMail 时遇到问题,但我无法理解它。我想在我的邮箱中搜索具有特定主题(本例中为 1234)的邮件。我使用 message.getSubject() 获取主题并将其放入 if 语句中并查看它是否等于 1234,但它每次都会给我一个 NullPointerException 。奇怪的是,如果我试图打印邮件的主题(没有 if 语句),似乎没有任何问题。

这是代码:

Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);

//Get all messages from inbox
Message[] messages = inbox.getMessages();

for (int i = 0; i < messages.length; i++) {
    if (messages[i].getSubject().equals("1234")) {
         System.out.println("Message found");
    }
}

这是错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

在下面一行:

if (messages[i].getSubject().equals("1234")) {

希望大家能帮我解决这个问题。

最佳答案

这种代码在 NullPointerException 方面是危险的:

if (messages[i].getSubject().equals("1234")) {

你可以在这里得到两个NullPointerException:

  1. messages[i] 可以为 null 并抛出一个 NullPointerException
  2. messages[i].getSubject() 也可以为 null 并执行相同的操作。

我的建议是采取防御路线并将其重写为:

if(messages[i] != null && "1234".equals(messages[i].getSubject())) {

这不会抛出 NullPointerException,因为它会检查 NullPointerException 的可能候选项是否不为 null (messages[i])并且通过将 "1234" 作为第一个比较项来反转比较。 “1234” 不能为 null

关于JavaMail message.getSubject().equals 给出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47557840/

相关文章:

javascript - 基本的 javascript if-else 函数不起作用?

android - 继续在构造函数上出现 NullPointerException 错误

java - Android NullPointerException 错误消息

java - 不共享任何外键关系的 JPA 实体之间的 @OneToOne 关系

java - 来自 Firebase 的纬度和经度坐标不正确,并且所有帖子的纬度和经度坐标均相同

PHP : Is there a way, 把这个 if/elseif/else 语句写得更短?

java - getTabHost() 返回 null

java - 在单元测试中验证对依赖项的调用?

java - io.cucumber.core.exception.CucumberException : Could not convert arguments. ..看来您没有注册数据表类型

javascript - 如果声明不起作用?