受信トレイを 10 秒ごとにループでチェックするスレッドがあります。メール セッションとストアを作成し、ループの前にストアに接続します。
store.connect()
while (running) {
Thread.sleep(emailReceiveInterval);
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
Message[] emails = inbox.getMessages();
[...]
inbox.close(true);
}
問題は、スレッドの実行中に新しい電子メールが取得されないことです。
そのため、ループ内のストアに接続して閉じることを試みました。
while (running) {
try {
Thread.sleep(emailReceiveInterval);
store.connect();
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
Message[] emails = inbox.getMessages();
[...]
finally {
inbox.close(true); // Exception handling not posted
store.close(); // Exception handling not posted
}
}
最初のループは問題なく、すべてのメールは正しく受信されますが、2 番目のstore.connect()で NullPointerException を受け取ります。
java.lang.NullPointerException: null
at org.apache.geronimo.javamail.store.pop3.POP3Store.protocolConnect(POP3Store.java:164) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2]
at javax.mail.Service.connect(Service.java:251) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2]
at javax.mail.Service.connect(Service.java:91) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2]
at javax.mail.Service.connect(Service.java:76) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2]
at com.company.MyClass$ReceivingThread.run(MyClass.java:161) ~[target-eclipse/:na]
ループごとに INBOX を更新するにはどうすればよいですか?