如果抛出异常,则跳过执行

时间:2013-04-05 05:11:30

标签: java exception

我被困在一些非常基本的东西上。在我们的游戏中,我们有一个可以通过URL获取关卡的leveleditor / loader。现在,如果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,如果它。

3 个答案:

答案 0 :(得分: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之后的建议。

答案 1 :(得分: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();
    }
}

答案 2 :(得分:0)

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

in = new Scanner(new BufferedReader(new InputStreamReader(
            url.openStream())));