18 Stimmen

JavaMail: IMAPFolder.idle() am Leben erhalten

Ich entwickle ein Programm, das ein Gmail-Konto auf neue Nachrichten überwachen muss, und um diese so schnell wie möglich zu erhalten, verwende ich die Leerlauffunktion von JavaMail. Hier ist ein Codeschnipsel aus dem Thread, den ich verwende, um folder.idle() aufzurufen:

//Run method that waits for idle input. If an exception occurs, end the thread's life.
public void run() {

    IMAPFolder folder = null;

            try {
                folder = getFolder();
                while(true)
                {
                  //If connection has been lost, attempt to restore it
                  if (!folder.isOpen())
                      folder = getFolder();
                  //Wait until something happens in inbox
                  folder.idle(true);
                  //Notify controller of event
                  cont.inboxEventOccured();
                }
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }
             System.out.println("MailIdleWaiter thread ending.");
}

Die Methode getFolder() öffnet grundsätzlich die Verbindung zum IMAP-Server und öffnet den Posteingang.

Das funktioniert eine Zeit lang, aber nach etwa 10 Minuten werden keine Updates mehr empfangen (es wird keine Ausnahme ausgelöst).

Ich bin auf der Suche nach Vorschlägen, wie ich die Verbindung aufrechterhalten kann. Brauche ich einen zweiten Thread, dessen einzige Aufgabe es ist, zu schlafen und den idle()-Thread alle 10 Minuten zu erneuern, oder gibt es einen einfacheren/besseren Weg?

Vielen Dank im Voraus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X