Как я могу прервать IDLE IMAP? - PullRequest
6 голосов
/ 25 августа 2009

Я использую Javamail API для подключения к моему серверу IMAP. Все отлично работает с javax.mail.Folder.idle () метод . Мой слушатель вызывается, когда приходит новое письмо. Однако проблема в том, что блоки бездействия навсегда, как мне прервать их? Как мне на самом деле остановить прослушивание, не убивая мою Java-программу?

Я пытался вызвать Thread.interrupt () в потоке idle'd. Ничего не произошло. У меня заканчиваются идеи.

Ответы [ 2 ]

8 голосов
/ 25 августа 2009

Выполнение любой операции с этой папкой (из другого потока) приведет к немедленному возврату метода idle(). Поэтому, если вы хотите принудительно прервать его, просто вызовите close() из нового потока.

3 голосов
/ 20 октября 2011

Если вы правильно прочитаете документацию и прочитаете исходный код, вы поймете, что вам нужно создать новый поток для вызова .idle().

Выделите этот поток для переменной, и всякий раз, когда вы хотите вызвать interrupt() в этом потоке, или просто игнорируйте уведомления!

Если вам нужно снова запустить idle(), просто перезапустите поток!

Я создал нечто подобное, так что вы можете проверить это.

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

Удачи

...