JavaMail message.getSubject().equals 给出 NullPointerException

JavaMail message.getSubject().equals gives NullPointerException

我在使用 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 的可能候选者是否不为空 (messages[i]) 并且通过将 "1234" 作为第一个比较项。 "1234" 不可能是 null.