2013-02-28 40 views
0

我正在使用java郵件與gmail連接,並且我正在爲所有操作保留一個存儲。 (商店被設置爲靜態。)。 IMAPFolder實例附帶有imap偵聽器。所以文件夾始終保持打開狀態。 (文件夾關閉不會隨時調用)但是,幾分鐘後運行,我得到FolderClosedException。在發生異常之後,雖然可以重新打開該文件夾,但不能再次發出idle()命令,這將導致NullPointerException。JavaMail:FolderClosedException頻繁發生

保持文件夾總是打開有什麼問題嗎?

在此先感謝。

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

[編輯] 在這裏我粘貼我正在做的POC與實際的代碼。在重新連接存儲之後檢查.isConnected()時出現NullPointerException。以下是將idle()命令發送到商店的Thread的運行方法。

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) 
+0

任何人有任何想法?非常感謝任何建議,因爲這非常緊迫。謝謝。 – 2013-02-28 18:38:01

回答

0

一般來說,郵件服務器不喜歡你,當你不使用它們保持打開狀態。典型的IMAP服務器在超時未使用的連接之前會給你30分鐘的時間; Gmail可能更具侵略性。

+0

非常感謝你香農。當這種超時發生時,郵件客戶端應該做什麼?我試圖重新連接同一個存儲區,但是當再次發出idle()命令時它會拋出NullPointException異常。所有IMAPFolders都會重複拋出FolderClosedException,因爲它們的偵聽器正在運行。
我是否必須重新創建新商店並從頭開始從該商店獲取IMAPFolders? – 2013-03-01 04:51:12

+0

您可以重新連接存儲,但您還需要重新打開文件夾。你可以向我展示你得到的NullPointerException的棧跟蹤嗎? – 2013-03-01 18:25:31

+0

謝謝比爾的建議。我用代碼片段和堆棧跟蹤編輯了原始文章。 – 2013-03-04 16:13:05