2013-04-05 2 views
0

Я застрял на чем-то очень простом. В нашей игре у нас есть leveleditor/loader, который может получать уровни через 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, если это так.

+0

Итак, когда исключение, какое действие вы хотите должно произойти? –

+0

Сразу после кода. readLine() выполняется, даже если выбрано исключение. – arynaq

+0

@ Chetter Hummin, никаких действий. – arynaq

ответ

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(); 
    } 
} 

EDIT: После предложения LuiggiMendoza.

+0

@LuiggiMendoza: Спасибо, это хорошее предложение .. –

1

Использование throws и finally. Позвольте вызывающей функции обрабатывать его. Я не проверял, но такого рода вещи есть идея ...

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(); 
    } 
} 
0

В контексте одного потока, если эта строка ниже бросает исключение, следующая строка кода не будет выполняться. Если вы думаете, что ваш код делает иначе, это может быть другой поток делает его/какой-то другой код

in = new Scanner(new BufferedReader(new InputStreamReader(
      url.openStream()))); 
Смежные вопросы