2013-09-30 28 views
2

我正在开发一个java应用程序,它需要并保存与attachemnts.mail的所有邮件。但我想要多线程。我的想法就是这样。带多线程的Javax邮件

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

问题是,当工作线程正在消息并调用方法:

Message.getFolder.open(); 

Message.getFolder.close(); 

导致problems.If一个线程打开的文件夹和另一个尝试打开同一个文件夹,应用程序抛出操作不允许例外。

有人可以帮助我吗?打开它之前

+0

据我,你应该有任何一个读取器线程或一个文件夹每个线程。这将解决您的问题。不要尝试使用相同的线程读取相同的文件夹。或者,也可以在主线程打开文件夹进行读取操作后,从一个文件夹中获取消息。 –

回答

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(); 
    }