7

我正在使用 Javamail API 连接到我的 IMAP 服务器。javax.mail.Folder.idle()方法一切正常。当有新邮件进来时,我的侦听器会被调用。但是问题是永远空闲块,我该如何中断它?如何在不杀死我的 Java 程序的情况下真正停止监听?

我试过在空闲线程上调用 Thread.interrupt() 。没发生什么事。我的想法不多了。

4

3 回答 3

9

对该文件夹执行任何操作(从另一个线程)将导致idle()方法立即返回。因此,如果您想强制中断它,只需close()从新线程调用即可。

于 2009-08-25T04:45:11.387 回答
4

如果您正确阅读文档并阅读源代码,您会意识到您必须创建一个新线程来调用.idle().

将该线程分配给一个变量,并且无论何时您想要调用该interrupt()线程,或者只是忽略通知!

如果您需要idle()重新开始,只需重新运行线程!

我创造了类似的东西,所以你可能想看看。

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

祝你好运

于 2011-10-20T16:07:02.837 回答
0

中止 IDLE 命令的正确方法是以下代码段。请注意,Folder 实例应与用于开始空闲的实例相同。我已经测试了在这个线程上提出的其他解决方案,但它们在我的情况下不起作用。

IMAPFolder folder = store.getFolder("INBOX");
try {
  folder.doOptionalCommand("Abort IDLE error mesage", new IMAPFolder.ProtocolCommand() {
  @Override
  public Object doCommand(IMAPProtocol p) throws ProtocolException {
    p.idleAbort();
    return Boolean.TRUE;
  }
});
} catch (MessagingException e) {
  e.printStackTrace();
}
于 2020-10-12T17:19:10.760 回答