2011-06-23 80 views
4
  1. 以下代碼引發IndexOutOfBoundsException。任何想法爲什麼?javamail和gmail

    Folder folder = store.getDefaultFolder(); 
    folder = folder.getFolder("INBOX"); 
    
    int totalMessages = folder.getMessageCount(); 
    //totalMessages is 17000 
    
        folder.getMessages(16900, 16999) --- here I am trying to get the NEWEST 99                       messages. 
    

此代碼拋出,即使有這麼多的郵件除外indexoutofbounds。我究竟做錯了什麼?

  1. folder.getMessages() - 將第一封電子郵件的所有電子郵件都發送到最後。在我的情況下17000!我如何獲得從最新到最舊的電子郵件? 我只想看最新的電子郵件 - 其中約100個。這可能嗎?
+1

我明白了 - 最後一封電子郵件是folder.getMessageCount() - folder.getDeletedMessageCount(); – jumpa

回答

5

從來沒有我們在代碼中的魔術價值,它只會讓你痛苦。嘗試:

int messagesToDisplay = 100; 
folder.getMessages(totalMessages - messagesToDisplay , totalMessages); 

JavaDoc消息均標記有1基於陣列不是0

你能還添加堆棧跟蹤請。

+0

同樣的錯誤。我首先嚐試了這一點,當我得到錯誤時,替換了實際值並再次進行了Api調用。 – jumpa

+0

而且堆棧跟蹤isjava.lang.IndexOutOfBoundsException \t在com.sun.mail.imap.IMAPFolder.checkRange(IMAPFolder.java:361) \t在com.sun.mail.imap.IMAPFolder.getMessage(IMAPFolder.java: 1251) \t在javax.mail.Folder.getMessages(Folder.java:866) \t在ashwin.GMailReader.readMail(GMailReader.java:38) \t在ashwin.GMailReader.main(GMailReader.java:56) – jumpa

+0

使用'folder.getMessage(1)'獲取單個消息是否有效? – Tnem

0

請先在read或read_write模式下打開文件夾。

folder.open(Folder.READ_WRITE);