我正在使用连接到我的IMAP服务器的Javamail API。使用javax.mail.Folder.idle()method,一切都很顺利。当一个新邮件进来时,我的监听器会被调用。但是问题是永远是空闲块,我该如何打断它?如何在不杀死Java程序的情况下实际停止监听?
我试过在idle'd线程上调用Thread.interrupt()。什么都没发生。我的想法已经不多了。
答案 0 :(得分:8)
对该文件夹(来自另一个线程)执行任何操作将导致idle()
方法立即返回。因此,如果您想强制中断它,只需从新线程中调用close()
。
答案 1 :(得分:3)
如果您正确阅读文档并阅读源代码,您将意识到必须创建一个新线程来调用.idle()
。
将该线程分配给变量,并且只要您想在该线程上调用interrupt()
,或者只是忽略通知!
如果您需要重新开始idle()
,请重新运行主题!
我创造了类似的东西,所以你可能想看看它。
祝你好运答案 2 :(得分: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();
}