我在javamail商店isConnected()函数中遇到了一个非常奇怪的错误。我在我的Android应用程序中使用它,如果连接断开,则重新连接到存储。
if (!store.isConnected()) store.connect(host, username, password);
但是,当连接断开时,此函数在第一次调用时返回 true ,第二次调用时返回 false 。这意味着如果没有连接存储,上面的代码将不会触发store.connect,但是这段代码:
if (!store.isConnected()) store.connect(host, username, password);
else if (!store.isConnected()) store.connect(host, username, password);
由于第二次调用返回false的isConnected()函数,将重新连接存储。
我不知道我是否解释了好的错误。 我想知道这是否是已知的行为。也许,我做错了什么。或者,如果商店断开连接,也许有更好的方法可以重新连接商店。
提前谢谢!
编辑:
此代码:
LOGGER.warning("START1");
if (!store.isConnected()) {
LOGGER.warning("START1 CONN");
store.connect(host, username, password);
LOGGER.warning("END1 CONN");
}
LOGGER.warning("END1");
LOGGER.warning("START2");
if (!store.isConnected()) {
LOGGER.warning("START2 CONN");
store.connect(host, username, password);
LOGGER.warning("END2 CONN");
}
LOGGER.warning("END2");
在javamail debug中输出:
03-29 15:52:13.162: W/ShowMailbox(2063): START1
03-29 15:52:15.238: I/System.out(2063): IMAP DEBUG: IMAPProtocol noop
03-29 15:52:15.238: I/System.out(2063): A57 NOOP
03-29 15:52:15.242: I/System.out(2063): DEBUG: IMAPStore connection dead
03-29 15:52:15.242: I/System.out(2063): DEBUG: IMAPStore cleanup, force true
03-29 15:52:15.242: I/System.out(2063): DEBUG: IMAPStore cleanup done
03-29 15:52:22.810: W/ShowMailbox(2063): END1
03-29 15:52:24.762: W/ShowMailbox(2063): START2
03-29 15:52:34.033: W/ShowMailbox(2063): START2 CONN
03-29 15:52:36.369: I/System.out(2063): * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc. See COPYING for distribution information.
03-29 15:52:36.369: I/System.out(2063): A0 CAPABILITY
...
03-29 15:52:37.857: I/System.out(2063): A3 OK LOGIN Ok.
03-29 15:52:38.053: I/System.out(2063): IMAP DEBUG: AUTH: PLAIN
03-29 15:52:39.297: W/ShowMailbox(2063): END2 CONN
03-29 15:52:40.885: W/ShowMailbox(2063): END2
看起来第一次调用isConnected()被执行但是即使store没有连接也返回true,第二次isConnected()根本没有被执行!但它执行connect()函数!?
我真的很困惑。有点害怕...... :)
答案 0 :(得分:0)
您可能遇到了JavaMail 1.4.2中修复的错误。您应该能够使用newest version of JavaMail以及additionnal.jar和activation.jar文件。
答案 1 :(得分:0)
从不同线程共享同一IMAPStore对象并在池中建立一个连接时,您可能会遇到这样的问题。因此,请认真考虑同时使用商店的方式。