2009-08-25 16 views
6

Estoy usando la API de Javamail conectando a mi servidor IMAP. Todo funciona muy bien con javax.mail.Folder.idle() method. Mi oyente recibe una llamada cuando ingresa un nuevo correo. Sin embargo, el problema es que los bloques permanecen inactivos para siempre, ¿cómo lo interrumpo? ¿Cómo detengo la escucha sin matar mi programa Java?¿Cómo puedo interrumpir el IDLE de IMAP?

He intentado llamar a Thread.interrupt() en el hilo inactivo. No pasa nada. Me estoy quedando sin ideas.

Respuesta

8

Realizar cualquier operación en esa carpeta (desde otra secuencia) hará que el método idle() se devuelva inmediatamente. Entonces, si quiere interrumpirlo con fuerza, simplemente llame al close() desde un nuevo hilo.

3

Si lee la documentación correctamente y lee el código fuente, se dará cuenta de que debe crear un nuevo hilo para llamar al .idle().

asignar ese hilo a una variable, y cada vez que desee llamar a la interrupt() en ese hilo, o simplemente ignorar las notificaciones!

Si necesita volver a obtener idle(), ¡simplemente vuelva a ejecutar el hilo!

He creado algo similar, por lo que es posible que desee comprobarlo.

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

Buena suerte

+0

votaría por esta respuesta, ya que es simple, pero exacta e instructiva, que era una especie de pensar en la posibilidad de utilizar una rosca exterior para la marcha en vacío, pero la clase de pensamiento que Sería feo desde el diseño, bueno, supongo que tiene que ser feo cuando se trata de multihilo y cosas similares. Para resumir, esta solución funciona muy bien, era demasiado vago para analizar minuciosamente el ejemplo en el enlace, pero probé de acuerdo con esta publicación y puedo confirmar que funciona muy bien, no he notado ningún inconveniente hasta el momento. –