2014-11-23 1 views
-1

를 슬로우 선언해야합니다 나는 제거 throws IOException 생성자로부터 throw됩니다. 답장을 보내 주셔서 감사합니다.보고되지 않은 IOException이이 줄에 오류가 점점 임

+2

당신의'SpriteSheet' 않습니다 그럼 무엇을 : 당신이 체크 예외를 throw 메서드 호출을 초기화 할 경우

, 당신은 중괄호로 초기화 블록을 공급하고, 거기에 초기화 코드를 넣어야 생성자는 어떻게 생겼습니까? (당신은 우리에게 스 니펫을 보여 줬지만 완전한 생성자를 보여줘야한다.) 스택 트레이스를 출력하고 아무 일도 일어나지 않은 것처럼 계속하는 것이 예외를 "처리하는"올바른 방법은 거의 없다. –

+0

대신 IOException을 사용하십시오. 예외가 발생하면 작동합니다. – Muhammad

+1

@Muhammad IOException을 잡는 것이 왜 IOException을 catch하지 못하고 예외를 잡을 수 없습니까? 그건 아주 나쁜 충고입니다. –

답변

1

모든 Unreported XYZException; must be declared 오류에 대한 이유는 동일합니다 : 전화를하는 방법 또는 XYZException 예외에 대한 명시 적 throw가 직접 또는 중 하나를 통해 예외를 다룰 것입니다 주위에는 catch 블록이없는 그 슈퍼 클래스. 당신이 선언의 초기화 표현식에서 예외를 잡을 수 없어

참고 :

private SpriteSheet spriteSheet= new SpriteSheet("Sprites/player.png"); 

IOException이 생성자의 맥락에서 어떻게 발생하고 어떤 try/catch 없다 new SpriteSheet의 호출 그것 주위.

class MyClass { 

    private SpriteSheet spriteSheet; 

    { // Initializer block for spriteSheet 
     try { 
      spriteSheet=new SpriteSheet("Sprites/player.png"); 
     } catch(IOException e){ 
      e.printStackTrace(); 
      throw new IllegalStateException("Missing a required resource", e); 
     } 
    } 
    ... // Other declarations 
} 
+0

차라리 생성자에 초기화를 넣는 것이 좋습니다. 그리고 IOException을 무시하는 대신 런타임 예외를 던질 것입니다. –

+0

@JBNizet 스프라이트가 리소스를 제외한 다른 곳에서 온 경우이를 수행합니다. 이는 사용자가 잠재적으로 처리 할 수있는 오류를 나타냅니다. 그러나 스프라이트는 프로그램에서 컴파일 된 리소스에서 가져옵니다. 그것이 없으면, 호출자는 아무 것도 고칠 수 없습니다 : 그것은 MyClass의 빌드 문제입니다. 그래서 나는이 예외를보고하지 않았다. 어떤 것이 든, 나는 프로그램의 실행을 멈추게하는'false'를 주장 할 것이다. – dasblinkenlight

+1

어설 션은 기본적으로 비활성화되어 있습니다. 그래서 어떤 예외가 발생하면 (예를 들어 코드가 나중에 변경 될 수 있음), 객체가 일관성이없는 상태로 남게되고 명확한 런타임 예외를 말하는 대신에 버그를 모호하게 만듭니다. 문제가 무엇인지, 그리고 IOException을 근본 원인으로 포함합니다. –

관련 문제