0

Web サイトの HTML を取得するためにサーバー (私は書いていません) にクエリを実行していますが、サーバーにはいくつかのバグがあり、応答が返されないことがあります。メソッドに問題がありますが、起動するのに数分かかり、その間にコードが行き詰まります。エラーは rd = new BufferedReader(new Input... 行で発生します。サーバーが 1 秒または 2 秒以内に応答を返さない場合、タイマーを使用してコードを強制的にメソッドから除外する方法はありますか?コードが実行される数百回ごとにのみ、このバグが発生します。

public String getHTML(String urlToRead) {
    URL url;
    HttpURLConnection conn;
    BufferedReader rd;
    String line;
    String result = "";
    try {
        url = new URL(urlToRead);
        conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        while ((line = rd.readLine()) != null) {
            result += line;
        }
        rd.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}
4

2 に答える 2

4

既存のタイムアウト メソッドsetConnectTimeout(int)およびsetReadTimeout(int)を使用します。

タイムアウトした場合、 ajava.net.SocketTimeoutExceptionが発生します。


無関係ですが、キャッチしないことを検討してExceptionください。

于 2013-06-26T18:55:53.880 に答える
0

コードを別のスレッドに入れることができます。スレッドを開始した後、スレッドsleep内のフラグが設定されるまで、または x 秒が経過するまで実行します。次に、メイン プログラムに進みます。

于 2013-06-26T18:57:47.760 に答える