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