2012-06-27 23 views
1

我正在嘗試進行可能由於服務器關閉而導致異常的調用。 這就是我要完成的任務:Java異常 - 嘗試第n次返回到「try」語句塊

Server server = serverQueue.poll(); 
try { 
    if (server==null){return null} 
    server.makeConnection(); 

} catch (Exception e) { 
    // try another server 
    server = serverQueue.poll(); 
    // now return to try block? 

} 

所以我有5臺服務器,也許在以後的階段,我將添加更多一些。所以我想以這種方式連接到 其中的任何人。我如何返回到try塊?有什麼,諸如在Java這樣下面的聲明?:

Server server = serverQueue.poll(); 
outerBlock: 
try { 
    if (server==null){return null} 
    server.makeConnection(); 

} catch (Exception e) { 
    // try another server 
    server = serverQueue.poll(); 
    continue outerBlock; 

} 
+0

簡短的回答是「使用Java循環語句」。除了使用循環之外,您不能使控制在Java中向後跳轉。 –

回答

0

基本上是一個循環:

Server server = serverQueue.poll(); 
boolean connected = false; 
while (!connected) { 
    if (server == null) { 
     return null; 
    } 
    try { 
     server.makeConnection(); 
     connected = true; 
    } catch (Exception e) { 
     // Presumably log something here, for management info 

     // try another server 
     server = serverQueue.poll(); 
    } 
} 

或者避免重複:

Server server; 
boolean connected = false; 
while (!connected) { 
    server = serverQueue.poll(); 
    if (server == null) { 
     return null; 
    } 
    try { 
     server.makeConnection(); 
     connected = true; 
    } catch (Exception e) { 
     // Presumably log something here, for management info 
    } 
} 

你可能會考慮隔離的是,「找到服務器」部分到其自身的功能。

0

你需要把你的try塊一個簡單的循環中,無論是whilefor

+0

喜歡首先設置一個布爾值爲假,並在連接後將其設置爲true,並在一段時間內條件?看起來很難看 – Tom

+1

有幾種方法可以做到,但你需要控制循環,並決定放棄。 –

0

您可以同時使用一個for循環

Server server;  

for(int i=0;i<=numberOFServers-1;i++){ 
    server = serverQueue.poll(); 
     try { 
      if (server==null){return null} 
      server.makeConnection(); 

      } catch (Exception e) { 

      System.out.println("Server : " +i+ " could not establish connection"); 
      } 
}