동기 런타임 오류가 발생하면
try..catch..finally
문을 사용하여 오류를 catch합니다. 런타임 오류가 발생하면 Flash 런타임에서 예외를 throw하여 정상적인 실행이 중지되고 Error 유형의 특수 객체가 만들어집니다. 그런 다음 이 Error 객체는 첫 번째 사용 가능한
catch
블록에 전달됩니다.
try
문에는 오류가 발생할 가능성이 있는 명령문이 포함됩니다. 따라서
try
문에는 항상
catch
문을 함께 사용합니다.
try
문 블록의 명령문 중 하나에서 오류가 감지되면 해당
try
문에 연결된
catch
문이 실행됩니다.
finally
문에는
try
블록에서 오류가 발생하는지 여부와 관계없이 실행되는 명령문이 포함됩니다. 오류가 없으면
finally
블록 내의 명령문이
try
블록 명령문이 완료된 후 실행됩니다. 오류가 있으면 먼저 적합한
catch
문이 실행되고
finally
블록의 명령문이 뒤따라 실행됩니다.
다음 코드에서는
try..catch..finally
문을 사용하는 구문을 보여 줍니다.
try
{
// some code that could throw an error
}
catch (err:Error)
{
// code to react to the error
}
finally
{
// Code that runs whether an error was thrown. This code can clean
// up after the error, or take steps to keep the application running.
}
각
catch
문은 명령문이 처리하는 특정 예외 유형을 식별합니다.
catch
문은 Error 클래스의 하위 클래스인 오류 클래스만 지정할 수 있으며, 각
catch
문은 순서대로 검사됩니다. 오류 발생 유형과 일치하는 첫 번째
catch
문만 실행됩니다. 즉, 먼저 상위 수준의 Error 클래스를 검사한 다음 Error 클래스의 하위 클래스를 검사할 경우 상위 수준의 Error 클래스에서만 일치가 발생합니다. 다음 코드는 이런 상황에 대한 예입니다.
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
이전 코드는 다음을 출력합니다.
<Error> I am an ArgumentError
ArgumentError를 정확하게 catch하려면 다음 코드와 같이 가장 세부적인 오류 유형을 먼저 나열하고 보다 일반적인 오류 유형을 그 다음에 나열합니다.
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
ActionScript API의 여러 메서드 및 속성은 실행 시 오류가 발생하면 런타임 오류를 throw합니다. 예를 들어 다음 코드와 같이 메서드에서 오디오 스트림을 닫을 수 없는 경우 Sound 클래스의
close()
메서드에서 IOError를 throw합니다.
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
Adobe Flash Platform용 ActionScript 3.0 참조 설명서
에 익숙해지면 각 메서드 설명에 자세히 나와 있듯이 어떤 메서드에서 예외를 throw하는지 확인할 수 있습니다.