2016-10-10 27 views
0

アプリケーションが特定の秒でタイムアウトするようにしたいが、応答が得られるまで指定されたURLに接続しようとしている。以下は私が使用しているコードです。システムプロパティを設定してHttpURLConnectionタイムアウトが機能しない

System.getProperties().setProperty("sun.net.client.defaultConnectTimeout", timeOut); 

System.getProperties().setProperty("sun.net.client.defaultReadTimeout", timeOut); 

URL url = new URL(targetURL); 

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

が、私は次のプロパティ

connection.setConnectTimeout(Integer.parseInt(timeout)); 

を設定した場合、それは、サーバーの応答を待たずに所望の時間にタイムアウトします。

だから、システムのプロパティだけでタイムアウトにならないのはなぜですか?

behavior/bugと関係がありますか?それとも、Java 1.4と同じコードが以前はJava 1.4で動作していましたが、現在はJava 1.7を使用しているため、Javaのバージョンとの関係はあります。

+0

@ brso05何か提案できますか? – Steve

答えて

2

オブジェクト指向設計に対する標準的なアプローチは、防御的なコピーです。これは、メソッドが実際の内部オブジェクト自体を返すのではなく、データのコピーを返すので、オブジェクトを取得したAPIを経由せずに他のコードが有害なアクションを実行しようとしないため、変更の妥当性をチェックできます。

System.getProperties()は、コピーの内部システムプロパティのPropertiesオブジェクトを返します。代わりにSystem.setPropertyを使用してください。

+1

「防御的なコピー」については正しいですが、あなたが提案した変更では機能しません。 – Steve

+0

'timeOut'の実際の値は何ですか? – VGR

+0

40000ミリ秒 – Steve

関連する問題