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