2013-04-05 6 views
0

매우 기초적인 것에 붙어 있습니다. 우리 게임에서는 URL을 통해 레벨을 가져올 수있는 레벨 에디터/로더가 있습니다. 이제 URL이 존재하지 않는 파일을 가리키면 편집기는 레벨을로드하는 것을 거부하고 단순히 currentlevel에 머물러 있어야합니다. 이제는 기본 코드에 어려움을 겪고 있습니다. FileNotFound가 발생 (또는 다른) 경우예외가 발생하면 실행을 건너 뛰십시오.

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

기본적으로 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(); 
    } 
} 

편집 : @ LuiggiMendoza의 제안.

+0

@LuiggiMendoza : 고마워, 좋은 제안이야 .. –

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

생각이다. 코드가 다르게 동작한다고 생각하면 다른 스레드가 코드를 수행하고있는 것일 수 있습니다.

in = new Scanner(new BufferedReader(new InputStreamReader(
      url.openStream()))); 
관련 문제