私はjavaを使用してhttpサーバーに接続しています。すべてが正常です。もちろん例外をキャッチします(SocketTimeoutException
, ConnectException
, IOException
)。しかし、私の問題は(たとえば) ConnectException
発生すると、アプリはスタックしたままになります。もうプログラムの別の部分に進むことはできません... "return ..", System.exit
(ただし、アプリケーションを終了したくない)。
スケルトンprogは次のようになります。
boolean metod_to_check_http_server(){
try{
Create_connection(URL);
Set_Time_Out(3000);
open_HTTP_Connection();
Close_Connection();
return true; // All this part is fine...
}
catch (EXCEPTIONS)
{ // Here I know I have connection problem
// how could I return to main prog from here ?
// return false ? not work...
// System.exit(..); // too violent !
// so ?
}
回答:
回答№1は0try-catchステートメントにfinallyブロックを追加すると、フローを続行できます
try
{
}
catch{
}
finally{
}
回答№2の場合は0
catchブロックの後、コードにfinallyブロックを入れてみてください。
回答№3の場合は0
あなたの質問は知らずに答えることはできませんプログラムと環境の詳細については説明しますが、たとえば「接続に失敗しました」というダイアログで、接続の失敗についてユーザーに通知することをお勧めします。そして、「開いている接続を閉じることを忘れないでください finally
ブロック。
回答№4の場合は0
自分で例外処理を行い、接続が失敗した場合や無効な場合はfalseを返す必要があります。
boolean method_to_check_http_server(){
try{
Create_connection(URL);
Set_Time_Out(3000);
open_HTTP_Connection();
return true; // All this part is fine...
} catch (EXCEPTIONS) {
displayError();
return false;
} finally {
Close_Connection();
}
}
ご覧のとおり、接続が(finallyブロックで)閉じられていることを確認し、OSスレッドで実行されている開いたソケットをどこかに残さないようにしました。