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.