我在使用 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
:
- messages[i] 可以为
null
并抛出一个NullPointerException
。 - 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/