0

受信トレイを 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 を更新するにはどうすればよいですか?

4

1 に答える 1