0

我被困在一些非常基本的东西上。在我们的游戏中,我们有一个可以通过 URL 获取关卡的关卡编辑器/加载器。现在,如果 URL 指向一个不存在的文件,编辑器应该拒绝加载关卡并简单地停留在当前关卡中,我只是在处理基本代码。

private void loadLevel(URL url) {
    Scanner in = null;
    try {
        in = new Scanner(new BufferedReader(new InputStreamReader(
                url.openStream())));
        readLine(in);
        in.close();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

本质上,如果FileNotFound抛出(或任何其他)readLine(in)不应该继续。如果是的话,各种NPE。

4

3 回答 3

2
private void loadLevel(URL url) {
    Scanner in = null;
    try {
        in = new Scanner(new BufferedReader(new InputStreamReader(
                url.openStream())));
        /*if(in!=null){
            readLine(in);
            in.close();
        }*/
        readLine(in);
        in.close();
    }
    catch (Exception e) { 
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

编辑:在@LuiggiMendoza 的建议之后。

于 2013-04-05T05:15:45.877 回答
1

使用throwsfinally。让调用函数处理它。我还没有测试过,但是这种事情就是这样的想法......

private void loadLevel(URL url) throws IOException, FileNotFoundException {
    Scanner in = null;
    try {
        in = new Scanner(new BufferedReader(new InputStreamReader(
                url.openStream())));
        if (in == null) throw new FileNotFoundException();
        readLine(in);
    }
    finally {
        in.close();
    }
}
于 2013-04-05T05:23:21.773 回答
0

在单个线程的上下文中,如果下面这行抛出异常,则下一行代码将不会执行。如果您认为您的代码不这样做,则可能是另一个线程在执行此操作/其他代码

in = new Scanner(new BufferedReader(new InputStreamReader(
            url.openStream())));
于 2013-04-05T05:28:09.673 回答