2010-04-10 6 views
1
/** 
* An exception thrown when an illegal side pit was 
* specified (i.e. not in the range 1-6) for a move 
*/ 
public class IllegalSidePitNumException extends RuntimeException 
{ 
    /** 
    * Exception constructor. 
    * @param sidePitNum the illegal side pit that was selected. 
    */ 
    public IllegalSidePitNumException(int sidePitNum) 
    { 
     super("No such side pit number: "+sidePitNum); 
    } 
} 

어떻게 이것을 프로그램에서 사용하고 다시 시작할 수 있습니까? 프로그램을 끝내고 싶지는 않지만 예외를 처리하고 계속하고 싶습니다.사용자 정의 예외를 처리하고 처리 한 후 프로그램 흐름을 재개합니다.

답변

2

그냥 잡으세요.

try { 
    doStuffWhichPossiblyThrowsThisException(); 
} catch (IllegalSidePitNumException e) { 
    // Don't rethrow it. I would however log it. 
} 
continueWithOtherStuff(); 
+0

이 유형의 전문가가 throw 될 때 IllegalSidePitNumException. 나는 그것을 잡아서 meesage를 표시하고 계속해야한다. – fari

+0

그런 다음 메시지를 표시하는 줄을 추가하고 사용자가 확인을 클릭 할 때까지 기다린다. 이 작업을 수행하는 방법은 사용중인 UI 기술에 따라 다릅니다. 나는 그것이 스윙이라고 확신한다. true의 경우,'JOptionPane.showMessageDialog (null, "Some message");를'catch' 블록에 넣습니다. – BalusC

3

당신은 try/catch를 사용해야합니다. Sun (Oracle) exception handling tutorials에서 예외 처리에 대해 많은 것을 배울 수 있습니다. 이 튜토리얼에서는 catch와 Handling에 관한 섹션을 통해 특정 질문에 대한 답을 얻을 수 있습니다.

try { 
    ...call method here... 
} catch (IllegalSidePitNumException e) { 
    // Display message (per your comment to BalusC) 
    System.err.println(e.getMessage()); 
    e.printStackTrace(System.err); 

    // You can also handle the exception other ways (but do not ignore it) 
    // Such as correcting some offending values, setting up for a retry 
    // logging the information, throwing a different exception 
} 

...program continues executing here... 
1

(!) 참고 :이은 "예상"예외 인 경우, 대신의 RuntimeException의 예외에서 상속 할 수 있습니다이 예외를 던질 수있는 방법을 호출하는 코드의 예를 들어

. RuntimeExceptions는 예상치 못한 일이 발생했을 때, 예를 들어 프로그래머 오류로 인한 잘못된 입력과 같은 경우에 사용하기위한 것입니다.

물론 예외를 사용할 곳을 알려주지 않으므로이 이론이 모두 이론이므로 (실행을 계속하기를 원함)

doSomething(); 
throw new SomeException(...); 
doSomethingElse(); // ... after some handler has "resumed" the exception. 

를 위의 (가상)입니다 :

try { 
    doSomething(); 
} catch (SomeException ex) { 
    doRecovery(); 
} 
doSomethingElse(); 

하지만 자바에 다음과 같은 일을 할 수있는 방법은 없습니다 : 다른 사람이 말했듯이

1

, 다음을 수행 할 수 있습니다 "재개 모델"예외 처리의 예이며 Java는이를 지원하지 않습니다. (C#, C++ 또는 다른 현재 널리 사용되는 프로그래밍 언어는 없습니다 ... 을 지원했습니다.) 사실 Java 컴파일러는 위의 컴파일 오류를 제공합니다. throw에 연결할 수 없습니다.

관련 문제