【问题标题】:return a single message from array of messages从消息数组中返回一条消息
【发布时间】:2016-09-24 16:42:32
【问题描述】:

我只是要求我有一个类型的消息数组。所以我想从他们那里返回一条消息。谁能帮我怎么做?

public static Message getContent(String user, String pswd, String sub, String to)
        throws MessagingException, IOException {
    Session imapSession1 = TestMail.greenMail.getImap().createSession();
    Store store = imapSession1.getStore("imap");
    store.connect("foo", "password");
    Folder inbox = store.getFolder("INBOX");
    inbox.open(Folder.READ_ONLY);
    // Getting only unread messages.
    Flags flags = new Flags();
    flags.add(Flag.SEEN);
    FlagTerm flagTerm = new FlagTerm(flags, false);
    Message[] msgs = inbox.search(flagTerm);
    Message ms = msgs[0];
    return ms;

}

如上所示,我尝试返回第一条消息,但它抛出 IndexOutOfBoundsException: 0 所以任何人都可以帮我解决这个问题。提前致谢。

【问题讨论】:

  • 这意味着inbox.search 正在返回一个空数组。我们无法为您提供帮助。

标签: java


【解决方案1】:

您之前的代码有问题,或者没有未读邮件,但是在您搜索收件箱后,msgs 是空的 - 您只需要先检查msgs.length > 0,如果不是,然后决定什么你想做。您可以返回一个 Optional (Java8 功能,您需要更改方法签名以匹配)或根据您的需要简单地返回 null 或抛出异常。所有 3 个场景都需要在调用代码中进行适当的处​​理。

请注意,抛出异常不太可能是正确的方法,除非仅在应该有未读消息时才调用代码。

【讨论】:

  • 好的。但是当我在我的 testng 类中使用此代码时,它显示有一条消息。我将其作为静态字符串传递。但我想将我的 testng 类的实现转移到普通类并尝试调用该方法。所以它给了我这个错误。
  • 好吧,无可辩驳的事实是msgs 是空的,所以我认为您的问题的重点是错误的。您需要发布一个问题,重点是您的 testng 实现是什么(以及上面的代码)以及 为什么 msgs 是空的。
  • 我对其进行了调试,发现调试器收到了类未加载异常。 org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array
  • 你知道是什么原因造成的吗?
  • 其实我改了代码,可以回信了。但问题是当我试图在我的测试方法中编写除断言函数之外的任何代码时,测试会失败。如果只有断言语句,那么我的测试用例通过了。我不明白为什么会这样。
猜你喜欢
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2021-03-25
相关资源
最近更新 更多