我正在製作一個程序,需要監視Gmail帳戶中的新郵件,爲了儘快獲得它們,我正在使用JavaMail的閒置功能。這裏是從線程的代碼片段,我使用調用folder.idle():JavaMail:保持IMAPFolder.idle()存活
//Run method that waits for idle input. If an exception occurs, end the thread's life.
public void run() {
IMAPFolder folder = null;
try {
folder = getFolder();
while(true)
{
//If connection has been lost, attempt to restore it
if (!folder.isOpen())
folder = getFolder();
//Wait until something happens in inbox
folder.idle(true);
//Notify controller of event
cont.inboxEventOccured();
}
}
catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("MailIdleWaiter thread ending.");
}
的的GetFolder()方法基本上打開到IMAP服務器的連接,並打開收件箱。
這工作了一段時間,但10分鐘左右後,它停止獲取更新(不會引發異常)。
我在尋找建議,以保持連接活着。我是否需要第二個線程,它的唯一作用是每10分鐘休眠一次並更新idle()線程,還是有更簡單/更好的方法?
在此先感謝。
我打算也這樣做。你終於能夠解決這個問題了嗎?目前,我每15秒通過'folder.open/folder.close'輪詢文件夾,但IDLE當然會更好。我打算在應用服務器環境中使用它。 – Theo 2011-07-20 13:48:01
對不起,沒有更快發現你的評論。我最終放棄了這個項目,所以我從未接近過解決方案。但現在,這個線程有一個答案,也許這將工作......雖然它是基於投票,而不是閒置。 – Anders 2011-08-13 15:39:50
您必須同時進行投票和閒置才能正確執行此操作。根據規範,IDLE必須每半小時終止並更新一次,如果一箇中斷的NATbox正在運行,則更經常地更新。正確的間隔是......好吧,也許沒有一個正確的價值。 – arnt 2014-06-10 07:09:31