7

IMAP サーバーに接続する Javamail API を使用しています。すべてが 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 に答える