0

コードの無関係な部分を省略しました。

[...]
    try {
        URL url = new URL(updateUrl);
        BufferedReader input = new BufferedReader(new InputStreamReader(url.openStream()));
[...]
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
    } finally {
        input.close();
    }
[...]

問題は、最後の「input.close()」で、Eclipse が「入力を解決できません」と表示することです。

スコープの問題かもしれませんが、他の人のコードを見たことがありますが、通常は同じ形式であるため、ここで機能しない理由はわかりません。

ヒントはありますか?

事前にどうもありがとう、

4

3 に答える 3

2

それは確かにスコープエラーです。
Yourinputはブロック内で宣言されているtryため、ブロック内では表示されませんfinally。両方に見えるように外側で宣言すれば、問題ありません。

[...]
    BufferedReader input = null;
    try {
        URL url = new URL(updateUrl);
        input = new BufferedReader(new InputStreamReader(url.openStream()));
[...]
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
    } finally {
        if (input != null)
        {
            try {
              input.close();
            }
            catch (IOException exc)
            {
              exc.printStackTrace();
            }
        }
    }
[...]
于 2012-07-06T09:19:49.663 に答える
1

BufferedReader 入力インスタンスをグローバルに宣言するか、最初の try/catch ブロックの外側で次のように宣言します。

[...]
BufferedReader input;
    try {
        URL url = new URL(updateUrl);
        input = new BufferedReader(new InputStreamReader(url.openStream()));
[...]
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
    } finally {
        input.close();
    }
[...]
于 2012-07-06T09:19:35.867 に答える
1

そうです、それは範囲の問題です。Java はブロック スコープを使用します。つまり、1 つのスコープで宣言されたローカル変数は、そのスコープに含まれていないスコープでは見えません。 tryブロックとfinallyブロックは、この規則の例外ではありません。

BufferedReader input;
try {
    URL url = new URL(updateUrl);
    input = new BufferedReader(new InputStreamReader(url.openStream()));
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
} finally {
    if (input != null) {
        try {
            input.close();
        } catch (IOException e) {
            // Log or ignore this
        }
    }
}
于 2012-07-06T09:20:19.477 に答える