JavaMail:经常出现FolderClosedException

时间:2013-02-28 07:22:04

标签: javamail

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

始终打开文件夹是否有任何错误?

提前致谢。

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

[编辑] 在这里,我正在粘贴我正在进行POC的实际代码。在重新连接商店后检查.isConnected()时会出现NullPointerException。下面是Thread的run方法,它将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)

1 个答案:

答案 0 :(得分:0)

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