【问题标题】:javamail store.isconnected() function bugjavamail store.isconnected() 函数错误
【发布时间】:2015-06-01 22:24:13
【问题描述】:

我在 javamail store isConnected() 函数中遇到了一个非常奇怪的错误。我在我的 android 应用程序中使用它来存储连接断开时的重新连接。

if (!store.isConnected()) store.connect(host, username, password);

但是,当连接断开时,该函数第一次调用返回true,第二次调用返回false。也就是说上面的代码在store没有连接的情况下不会触发store.connect,但是这段代码:

if (!store.isConnected()) store.connect(host, username, password);
else if (!store.isConnected()) store.connect(host, username, password);

将重新连接商店,因为第二次调用 isConnected() 函数返回 false。

我不知道我解释的错误是否足够好。 我想知道这是否是已知行为。也许,我做错了什么。或者,如果商店断开连接,也许有更好的方法来重新连接商店。

提前谢谢你!

编辑:

这段代码:

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 调试中输出:

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 未连接且第二次 isConnected() 根本未执行,也会返回 true!?但是它执行connect()函数!?

我真的很困惑。还有一点害怕...... :)

【问题讨论】:

  • store.isConnected 向服务器发送 NOP 命令。如果成功,则返回 true。当然,服务器可以选择在那之后立即断开连接,但这似乎不太可能。发生这种情况时,debug output 会显示什么?
  • 如何在android应用程序的eclipse中调试?
  • @milosh 点击 Bill 提供的链接。
  • @Bill Shannon 我已经用调试信息编辑了我的答案
  • 您使用的是什么版本的 JavaMail?在调试输出中,它应该在开头包含版本号。

标签: java android jakarta-mail


【解决方案1】:

您可能遇到了在 JavaMail 1.4.2 中修复的错误。您应该可以使用newest version of JavaMail 以及additionalnal.jar 和activation.jar 文件。

【讨论】:

  • 如果我使用新的 javax.mail.jar 文件,this 有问题,我从常见问题解答中不明白如何解决它。我无法获得 MultiPart 对象。他们的建议是:Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()) 不起作用。
  • 你是什么意思“不能得到”?这听起来像是一个新问题,应该是一个新问题。不要忘记包含您正在使用的代码、您得到的异常以及调试输出。
【解决方案2】:

当从不同的线程共享相同的 IMAPStore 对象并且在池中有一个连接时,您可能会遇到这样的问题。所以要慎重考虑同时使用 store 的方式。

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2012-03-14
    • 2012-01-10
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多