2009-08-25 8 views
6

내 IMAP 서버에 연결하는 Javamail API를 사용하고 있습니다. 모든 것이 javax.mail.Folder.idle() method과 잘 작동합니다. 새 메일이 왔을 때 내 리스너가 호출됩니다. 그러나 문제는 유휴 블록이 영원히 중단 된 것입니다. 어떻게 중단합니까? Java 프로그램을 죽이지 않고 실제로 듣기를 멈추게하려면 어떻게해야합니까?어떻게 IMAP의 유휴 상태를 중단시킬 수 있습니까?

나는 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

그것은 디자인으로부터 추악 할 것입니다. 글쎄, 멀티 스레딩과 유사한 것들에 관해서는 추악해야합니다. 요약하자면,이 솔루션은 훌륭하게 작동합니다. 링크의 예제를 철저히 분석하기에는 너무 게으르지 만,이 포스트에 따라 테스트를 해본 결과 훌륭한 결과를 얻었으며 지금까지 어떠한 단점도 발견하지 못했습니다. –

관련 문제