5

これは奇妙な質問のように聞こえるかもしれませんが、私にはわかりません...

サーバーに接続して何かを行うアプリケーションがあるとしましょう。この接続は失敗し、キャッチできる例外をスローする可能性があります。

try {
  Client.connect();
} catch (System.Exception ex) {
  // Do some exception handling...
} finally {
  // Do some cleanup...
}

ただし、接続が成功した場合、アプリケーションは続行します...

try {
  Client.connect();
} catch (System.Exception ex) {
  // Do some exception handling...
} finally {
  // Do some cleanup...
}

// Talk to the server...

ただし、「サーバートーク」はどのような場合でも実行されます。例外が発生したかどうかは関係ありません。

接続が成功した場合にのみ「サーバー通話」が実行されるようにするにはどうすればよいですか?次のすべてのコードをtryステートメント内に移動する必要がありますか?そのような振る舞いをプログラムするためのクリーンな方法は何ですか?

4

5 に答える 5

2

のような別の変数clientConnectedを用意し、 の直後に true に設定しますClient.Connect()。次に、サーバーと通信する前に、try-catch チェックの外に出clientConnectedます。

1 回の try-catch ですべてを実行することは避けてください。例外をスローする可能性のあるアクションごとに個別の try-catch ブロックを使用し、特定の例外を可能な限りキャッチする必要があります。

于 2012-06-06T20:55:55.497 に答える
0

サーバーが接続されているかどうかを示すために、何らかのタイプのフラグ変数を使用します。メソッドがブール変数を返す場合も問題ありません。

int flag=0;
while(flag==0){
   try {
       Client.connect();
       flag=1;
   } catch (System.Exception ex) {
   // Do some exception handling...
   } finally {
      // Do some cleanup...
   }
}

//If server connects code
于 2012-06-06T20:58:26.530 に答える