2009-08-25 12 views
6

Sto utilizzando l'API Javamail che si collega al mio server IMAP. Tutto funziona perfettamente con javax.mail.Folder.idle() method. Il mio ascoltatore viene chiamato quando arriva una nuova mail. Tuttavia il problema sono blocchi inattivi per sempre, come posso interromperlo? Come posso interrompere effettivamente l'ascolto senza uccidere il mio programma Java?Come posso interrompere l'IDLE di IMAP?

Ho provato a chiamare Thread.interrupt() sul thread inattivo. Non accade nulla. Sono a corto di idee.

risposta

8

L'esecuzione di qualsiasi operazione su quella cartella (da un altro thread) causerà il metodo idle() da restituire immediatamente. Quindi, se vuoi interromperlo forzatamente, chiama semplicemente close() da una nuova discussione.

3

Se leggi la documentazione correttamente e leggi il codice sorgente, ti renderai conto che devi creare un nuovo thread per chiamare .idle().

Assegna quel thread a una variabile e ogni volta che si desidera chiamare lo interrupt() su quel thread o semplicemente ignorare le notifiche!

Se è necessario riprendere idle(), è sufficiente rieseguire il thread!

Ho creato qualcosa di simile, quindi potresti voler controllare.

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

Buona fortuna

+0

voterei per questa risposta come è semplice, ma accurato ed informativo, ero un po 'pensando alla possibilità di utilizzare una filettatura esterna del minimo, ma tipo di pensato che sarebbe brutto dal design, beh suppongo che debba essere brutto quando si parla di multithreading e cose simili. Quindi, per riassumere, questa soluzione funziona alla grande, ero troppo pigro per analizzare a fondo l'esempio nel link, ma ho provato in base a questo post e posso confermare che funziona alla grande, non ho notato alcun inconveniente finora. –

Problemi correlati