2009-08-25 63 views
6

我正在使用連接到我的IMAP服務器的Javamail API。一切工作都很好用javax.mail.Folder.idle()method。當一封新郵件進來時,我的聽衆會被調用。但是問題是永遠空閒,我該如何中斷它?如何在不殺死Java程序的情況下停止監聽?如何中斷IMAP的IDLE?

我試着在idle'd線程上調用Thread.interrupt()。什麼都沒發生。我正在用盡想法。

回答

8

對該文件夾(來自另一個線程)執行任何操作將導致idle()方法立即返回。所以如果你想強制中斷它,只需從一個新線程調用close()即可。

3

如果您正確閱讀文檔並閱讀源代碼,您將意識到必須創建一個用於調用.idle()的新線程。

將該線程分配給變量,並且只要您想在該線程上調用interrupt(),或者只是忽略通知!

如果您需要再次獲取idle(),只需重新運行主題即可!

我創造了類似的東西,所以你可能想看看它。

https://github.com/mofirouz/JavaPushMail/blob/master/src/main/java/com/mofirouz/javapushmail/JavaPushMailAccount.java

好運

+0

,我是那種使用外部線程空轉的可能性思想,但那種認爲我會投票支持這個答案,因爲它很簡單,但準確和翔實從設計來看它會很醜陋,我想在涉及到多線程和類似的東西時它會變得很難看。總之,這個解決方案效果很好,我懶得仔細分析鏈接中的例子,但是我根據這個帖子進行了測試,我可以確認它很好用,至今沒有發現任何缺點。 – 2016-11-04 13:34:36