2013-07-18 61 views
0

我有一個每10分鐘運行一次的桌面應用程序。我在開始時要求提供登錄憑據,然後繼續直到用戶退出應用程序。如何處理java中的連接中斷

我有我的邏輯,以這種方式,如果他輸入正確的憑據,然後表創建和他的登錄信息存儲。如果他輸入錯誤的憑證,那麼存儲錯誤憑證的表將被刪除,並彈出一個無效登錄彈出。

但是,當用戶的系統進入待機狀態或休眠狀態或沒有互聯網連接時,基本上如果應用程序無法連接到郵件,則會進入表刪除部分並丟棄表。

我該如何處理?如果有互聯網中斷,我希望如果用戶先前已成功登錄,那麼它不應該放棄表而退出。

這裏是代碼 - 創建後的登錄表,記錄插入(無​​形的是正宗與否)的控制來看過來 -

public void run(){ 
    Properties props = System.getProperties(); 
    props.setProperty("mail.store.protocol", "imap"); 
    try{ 
     Session session = Session.getDefaultInstance(props, null); 
     Store store = session.getStore("imap"); 
     store.connect(getMailboxId(), getEmailId(), getPassword()); 
     inbox = store.getFolder("Inbox"); 

        <<some data processing>> 
} 

catch (NoSuchProviderException e){ 
     e.printStackTrace(); 
     System.exit(1); 
    } 
    catch (MessagingException e){ 
     try { 
       new DbConnect().deleteRecords(); //Delete table if invalid credentials 
     } catch (ClassNotFoundException d) { 
      d.printStackTrace(); 
     } 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(controllingFrame, 
       "Invalid Credentials. Try again.", 
       "Error Message", 
       JOptionPane.ERROR_MESSAGE); 
     System.exit(2); 
    } 

回答

0

你能ping您的服務器(java code to ping an IP address)然後採取行動accourdingly?

僞代碼:

pingResult = ping server; 
if (pingResult == connectedToServer) { 
    result = table save or delete; //Working method 
}else { 
    result = only test against last login table; 
} 
continue with rest of program; 

編輯: 請注意,您在之前拋出NoSuchProviderException /旁邊的MessagingException。我相信你知道NoSuchProviderException擴展了MessagingException(http://docs.oracle.com/javaee/1.4/api/javax/mail/NoSuchProviderException.html),因此,錯誤可能總是發送到MessagingException catch。

棘手的部分是,商店拋出MessagingException作爲一個捕獲所有。我會設置一個標誌,嘗試一些值,然後只捕獲NoSuchProviderException,然後在try catch外測試該標誌與默認值並行動。我認爲,您可以捕捉到更具體的錯誤並且準確無誤。

所以,你所提供的代碼看起來是這樣的:

public void run(){ 
    **boolean flag = false;** 

    Properties props = System.getProperties(); 
    props.setProperty("mail.store.protocol", "imap"); 
    try{ 
     Session session = Session.getDefaultInstance(props, null); 
     Store store = session.getStore("imap"); 
     store.connect(getMailboxId(), getEmailId(), getPassword()); 
     inbox = store.getFolder("Inbox"); 

     **flag = true;** 

        <<some data processing>> 
} 
catch (NoSuchProviderException e){ 
     e.printStackTrace(); 
     System.exit(1); 
    } 

**if (!flag) {** 
     try { 
       new DbConnect().deleteRecords(); //Delete table if invalid credentials 
     } catch (ClassNotFoundException d) { 
      d.printStackTrace(); 
     } 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(controllingFrame, 
       "Invalid Credentials. Try again.", 
       "Error Message", 
       JOptionPane.ERROR_MESSAGE); 
     System.exit(2); 
    } 
+1

添加代碼,因爲我認爲這是混淆 – Dan

+0

感謝幫助很大,我編輯我的答案,以反映你的代碼,希望它有助於 – sparks