2

我正在使用 java 邮件与 gmail 连接,并且我正在为所有操作保留一个商店。(存储设置为静态。)。并且 IMAPFolder 实例附加了 imap 侦听器。因此文件夹始终保持打开状态。(任何时候都不会调用文件夹关闭)但是在几分钟后运行时,我得到了 FolderClosedException。出现异常后,虽然可以重新打开文件夹,但无法再次发出 idle() 命令,这将导致 NullPointerException。

保持文件夹始终打开有什么问题吗?

提前致谢。

==================================================== ==================

[编辑] 在这里我粘贴我正在做 POC 的实际代码。NullPointerException 在我重新连接商店后检查 .isConnected() 时出现。下面是 Thread 的 run 方法,它向 store 发送 idle() 命令。

public void run() {
        while (true) {
            try {
                System.out.println("Checking connectivity...");

                if (store.isConnected()) {
                    store.idle();
                    System.out.println("IDLE send...");
                } else {
                    Thread.sleep(5000);
                    System.out.println("Tring to connect...");

                    //Trying to reconnect to the store.
                    store.connect();
                    System.out.println("Previous store connected again");
                }
            } catch (InterruptedException ex) {
                System.out.println("InterruptedException...");
            } catch (StoreClosedException ex) {
                System.out.println("StoreClosedException...");
            } catch (MessagingException ex) {
                System.out.println("MessagingException...");
            }
        }
    }

这是堆栈跟踪:

Exception in thread "Thread-1" java.lang.NullPointerException
at com.sun.mail.imap.IMAPStore.waitIfIdle(IMAPStore.java:1881)
at com.sun.mail.imap.IMAPStore.getStoreProtocol(IMAPStore.java:946)
at com.sun.mail.imap.IMAPStore.isConnected(IMAPStore.java:1347)
at pocworks.POCWorks1$IDLEThread.run(POCWorks1.java:125)
4

1 回答 1

2

通常,邮件服务器不希望您在不使用它们时保持连接打开。典型的 IMAP 服务器会在未使用的连接超时前给您 30 分钟;Gmail 可能更具侵略性。

于 2013-02-28T22:58:44.423 回答