2

私はJavaメールを使用してGmailに接続しており、すべてのアクションに対して1つのストアを保持しています。(ストアは静的に設定されています。)また、IMAPFolderインスタンスはimapリスナーに接続されています。したがって、フォルダは常に開いたままになります。(フォルダクローズはいつでも呼び出されません)しかし、数分後に実行しているときに、FolderClosedExceptionが発生します。その例外の後、フォルダを再度開くことはできますが、idle()コマンドを再度発行することはできません。そのため、NullPointerExceptionが発生します。

フォルダを常に開いたままにしておくことに問題はありますか?

前もって感謝します。

================================================== =================

[編集]ここでは、POCを実行している実際のコードを貼り付けています。ストアに再接続した後に.isConnected()をチェックすると、NullPointerExceptionが発生します。以下は、idle()コマンドをストアに送信するThreadのrunメソッドです。

public void run() {
        while (true) {
            try {
                System.out.println("Checking connectivity...");

                if (store.isConnected()) {
                    store.idle();
                    System.out.println("IDLE send...");
                } else {
                    Thread.sleep(5000);
                    System.out.println("Tring to connect...");

                    //Trying to reconnect to the store.
                    store.connect();
                    System.out.println("Previous store connected again");
                }
            } catch (InterruptedException ex) {
                System.out.println("InterruptedException...");
            } catch (StoreClosedException ex) {
                System.out.println("StoreClosedException...");
            } catch (MessagingException ex) {
                System.out.println("MessagingException...");
            }
        }
    }

スタックトレースは次のとおりです。

Exception in thread "Thread-1" java.lang.NullPointerException
at com.sun.mail.imap.IMAPStore.waitIfIdle(IMAPStore.java:1881)
at com.sun.mail.imap.IMAPStore.getStoreProtocol(IMAPStore.java:946)
at com.sun.mail.imap.IMAPStore.isConnected(IMAPStore.java:1347)
at pocworks.POCWorks1$IDLEThread.run(POCWorks1.java:125)
4

1 に答える 1

2

通常、メール サーバーは、使用していないときに接続を開いたままにしておくことを好みません。一般的な IMAP サーバーでは、未使用の接続がタイムアウトになるまでに 30 分かかります。Gmail はより攻撃的である可能性があります。

于 2013-02-28T22:58:44.423 に答える