2011-06-23 18 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

私たちは決してコード内の魔法の値ではなく、痛みを引き起こします。試してみてください:あなたはまた、スタックトレースをしてください追加できるメッセージは1つのベースの配列でない0

で識別され

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

JavaDocから。

+0

同じエラー。私はこれを最初に試してみましたが、エラーが発生したときに実際の値を代入してApi呼び出しを再度行いました。 – jumpa

+0

そして、スタックトレースcom.sun.mail.imap.IMAPFolder.getMessageでcom.sun.mail.imap.IMAPFolder.checkRangeでisjava.lang.IndexOutOfBoundsException \t(IMAPFolder.java:361) \t(IMAPFolder.java: 1251)javax.mail.Folder.getMessages(Folder.java:866)ashwin.GMailReader.readMail(GMailReader.java:38で \t)ashwin.GMailReader.main(GMailReader.java:56で \t) – jumpa

+0

で \t 'folder.getMessage(1)'を使って単一のメッセージを取得できますか? – Tnem

0

まず、読み取りモードまたは読み取り書き込みモードでフォルダを開きます。

folder.open(Folder.READ_WRITE); 
関連する問題