2

我正在开发一个 java 应用程序,它接收并保存所有带有附件的邮件。但我想做多线程。我的想法就是这样。

一个计时器线程正在获取所有邮件并将它们放入 BlockingQueue。我将Javax.mail.Message对象放入队列。然后我的工作线程正在接收并处理它们。

问题是当工作线程接受 Message 并调用方法时:

Message.getFolder.open();

Message.getFolder.close();

导致问题。如果一个线程打开文件夹而另一个线程尝试打开同一个文件夹,应用程序将抛出Operation is not allowed异常。

有人能帮我吗 ?

4

1 回答 1

0

Folder.isOpen() - Indicates whether this Folder is in the 'open' state.在打开它之前尝试一下,比如

Folder folder = Message.getFolder();

if(folder.isOpen()==false){
folder.open();
}

同样在关闭之前,检查它是否已经打开然后只关闭:

  if(folder.isOpen()){
    folder.close();
  }
于 2013-09-30T08:11:16.873 回答