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

这确实是一个范围错误。
input在块内声明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 使用块作用域,这意味着在一个作用域中声明的局部变量在任何不包含在其中的作用域中都是不可见的。 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 回答