我正在使用Javamail apis在我的应用程序中阅读gmail / yahoo。我有一个timertask,它会使线程周期性地获取邮件。它适用于gmail。对于Yahoo我正在获得超时异常,如下所示。
java.util.concurrent.TimeoutException: com.sun.mail.imap.IMAPSSLStore.finalize() timed out after 15 seconds
at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_read(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:686)
at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:124)
at java.io.InputStream.read(InputStream.java:163)
at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
at com.sun.mail.iap.ResponseInputStream.readResponse(ResponseInputStream.java:96)
at com.sun.mail.iap.Response.<init>(Response.java:95)
at com.sun.mail.imap.protocol.IMAPResponse.<init>(IMAPResponse.java:60)
at com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:280)
at com.sun.mail.iap.Protocol.command(Protocol.java:313)
at com.sun.mail.imap.protocol.IMAPProtocol.examine(IMAPProtocol.java:864)
at com.sun.mail.imap.IMAPFolder.close(IMAPFolder.java:1329)
at com.sun.mail.imap.IMAPFolder.close(IMAPFolder.java:1263)
at com.sun.mail.imap.IMAPStore.cleanup(IMAPStore.java:1494)
at com.sun.mail.imap.IMAPStore.close(IMAPStore.java:1387)
at com.sun.mail.imap.IMAPStore.finalize(IMAPStore.java:1428)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:188)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:171)
at java.lang.Thread.run(Thread.java:841)
我没有弄清楚它为什么会发生这种情况。我能看到的是,雅虎比gmail花费的时间相对更多。但我不清楚这种延迟是如何导致调用finalizedaemon的。任何人都可以解释什么可能实际发生,有没有办法解决这个问题
我的部分代码在这里。 这是由线程调用的函数完成的。这里只给出了主线,功能很大。这个例外是随机的。有时邮件成功读取。所以我不怀疑代码。
store = session.getStore(sProtocol);
store.connect(acct.sIncomingHost, sUserOrEmail, acct.sPassword);
.....
folder = store.getFolder("foldername");
folder.open(Folder.READ_ONLY);
Message[] msgs = null;
msgs = folder.getMessages(index,
count);