Java null subjectline提供空指针异常

Java null subjectline提供空指针异常,java,jakarta-mail,Java,Jakarta Mail,使用下面的代码,我尝试只获取与主题行匹配的电子邮件 String subject = "test email"; Properties props = System.getProperties(); props.setProperty("mail.store.protocol", "imaps"); try { Session session = Session.getDefaultInstance(props, null); Store

使用下面的代码,我尝试只获取与主题行匹配的电子邮件

String subject = "test email";
    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", "imaps");
    try {
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("imaps");
        store.connect(host, userName, password);
        Folder inbox = store.getFolder("Inbox");
        inbox.open(Folder.READ_ONLY);
        int count = inbox.getMessageCount();
        System.out.println(count + " total messages");
        Message messages[] = inbox.getMessages();
        for (int i = 0; i < messages.length; i++) {
            if (messages[i].getSubject().contains(subject)) {
                System.out.println(messages[i].getSubject() + "\t"
                        + messages[i].getSentDate());
            } else {
                System.out.println("subject mismatch");
            }
        }
但我还是得到了下面的错误

java.lang.NullPointerException
    at com.getEmails.readEmails.main(readEmails.java:34)
另外,我尝试了
equals
equalsIgnoreCase
而不是
contains
,但问题仍然是一样的

当只打印没有条件的主题行时,它将
null
显示为主题行。所以我尝试了下面的方法

else if (messages[i].getSubject().contains(null)) {
                    System.out.println(messages[i].getSubject() + "\t"
                            + messages[i].getSentDate());
                }


else if (messages[i].getSubject().contains("")) {
                    System.out.println(messages[i].getSubject() + "\t"
                            + messages[i].getSentDate());
                }


else if (messages[i].getSubject().contains(" ")) {
                    System.out.println(messages[i].getSubject() + "\t"
                            + messages[i].getSentDate());
                }
else if (messages[i].getSubject().contains("null")) {
                        System.out.println(messages[i].getSubject() + "\t"
                                + messages[i].getSentDate());
                    }
但错误仍然是一样的


请让我知道如何修复此问题。

您应该首先检查
null
,因为如果
messages[i]
messages[i],它将给出
null点异常。除此之外,
contains(null)
没有任何意义,必须引起
NullPointerException
但是
messages[i]。getSubject()==null
确实有意义。

你应该首先检查
null
因为如果
messages[i]
messages[i].getSubject()
null
。除此之外,
contains(null)
没有任何意义,必须引起
NullPointerException
但是
消息[i]。getSubject()==null
是有意义的。

问题是,
getSubject()
产生的任何结果有时都可能是
null
,因此,对其执行的任何操作都将产生
NullPointerException
,无论您执行何种类型的检查

要解决此问题,您需要进行空检查,如下所示:

        for (int i = 0; i < messages.length; i++) {
            if ((messages[i].getSubject() != null) && (messages[i].getSubject().contains(subject))) {
                System.out.println(messages[i].getSubject() + "\t"
                        + messages[i].getSentDate());
            } else {
                System.out.println("subject mismatch");
            }
        }
for(int i=0;i
问题在于,
getSubject()
生成的任何内容有时都可能是
null
,因此,对其执行的任何操作都将生成
NullPointerException
,而不管您执行何种类型的检查

要解决此问题,您需要进行空检查,如下所示:

        for (int i = 0; i < messages.length; i++) {
            if ((messages[i].getSubject() != null) && (messages[i].getSubject().contains(subject))) {
                System.out.println(messages[i].getSubject() + "\t"
                        + messages[i].getSentDate());
            } else {
                System.out.println("subject mismatch");
            }
        }
for(int i=0;i
除了其他人所说的之外,您可能还想研究将该方法与一个允许在服务器上进行搜索的方法一起使用:

Message[] messages = inbox.search(new SubjectTerm(subject));
for (int i = 0; i < messages.length; i++) {
    System.out.println(messages[i].getSubject() + "\t"
                    + messages[i].getSentDate());
}
Message[]messages=inbox.search(新主题词(subject));
for(int i=0;i
除了其他人所说的之外,您可能还想研究将该方法与一个允许在服务器上进行搜索的方法一起使用:

Message[] messages = inbox.search(new SubjectTerm(subject));
for (int i = 0; i < messages.length; i++) {
    System.out.println(messages[i].getSubject() + "\t"
                    + messages[i].getSentDate());
}
Message[]messages=inbox.search(新主题词(subject));
for(int i=0;i