패키지 | flash.events |
클래스 | public class UncaughtErrorEvent |
상속 | UncaughtErrorEvent ErrorEvent TextEvent Event Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
try..catch
블록 밖에서 오류가 발생하는 경우 또는 리스너가 등록되지 않은 상태로 ErrorEvent 객체가 전달되는 경우 포착되지 않는 오류가 발생합니다. 포착되지 않는 오류 이벤트 기능은 "전역 오류 핸들러"로 지칭되기도 합니다.
이 이벤트를 전달하는 UncaughtErrorEvents 객체는 LoaderInfo 객체 또는 Loader 객체와 연결되어 있습니다. 다음 속성을 사용하면 UncaughtErrorEvents 인스턴스에 액세스할 수 있습니다.
-
LoaderInfo.uncaughtErrorEvents
: 동일한 SWF에 정의된 코드에서 포착되지 않는 오류를 감지합니다. -
Loader.uncaughtErrorEvents
: Loader 객체에서 로드한 SWF에 정의된 코드에서 포착되지 않는 오류를 감지합니다.
uncaughtError
이벤트가 발생하면 이벤트가 처리되더라도 오류가 발생한 호출 스택이 더 이상 실행되지 않습니다. 동기 오류인 경우에는 오류가 발생한 함수에 있는 나머지 코드가 실행되지 않습니다. 따라서 포착되지 않는 오류 이벤트가 발생하면 응용 프로그램이 불안정한 상태가 될 수 있습니다. 포착되지 않는 오류의 원인으로는 여러 가지가 있을 수 있으므로 어떤 기능을 사용할 수 있을지는 예측하기 어렵습니다. 예를 들어 응용 프로그램에서 네트워크 작업이나 파일 작업은 실행할 수 있을 수도 있습니다. 그러나 이러한 작업이 항상 가능한 것은 아닙니다.
SWF에서 다른 SWF를 로드하는 경우 uncaughtError
이벤트가 LoaderInfo 계층 구조를 통해 위/아래로 버블링합니다. 예를 들어 A.swf에서 Loader 인스턴스를 사용하여 B.swf를 로드하는 경우 B.swf에서 포착되지 않는 오류가 발생하면 다음 순서로 uncaughtError
이벤트가 LoaderInfo 및 Loader 객체로 전달됩니다.
- (캡처 단계) A.swf의 LoaderInfo
- (캡처 단계) A.swf에서의 Loader
- (대상 단계) B.swf의 LoaderInfo
- (버블링 단계) A.swf에서의 Loader
- (버블링 단계) A.swf의 LoaderInfo
Loader 객체의 uncaughtErrorEvents
속성은 대상 단계의 uncaughtErrorEvent
를 전달하지 않으며 캡처 및 버블링 단계의 이벤트만 전달합니다.
다른 이벤트 버블링과 마찬가지로, stopPropagation()
또는 stopImmediatePropagation()
을 호출하면 이벤트가 다른 리스너로 더 이상 전달되지 않습니다. 그러나 한 가지 차이점이 있습니다. 즉, 이벤트 전파를 위해 Loader 객체의 UncaughtErrorEvents 객체가 로드된 SWF의 LoaderInfo.uncaughtErrorEvents
객체와 쌍으로 처리됩니다. 이러한 객체 중 하나에 등록된 리스너에서 stopPropagation()
메서드를 호출하면 해당 UncaughtErrorEvents 객체에 등록된 다른 리스너 및 이와 쌍을 이루는 UncaughtErrorEvents 객체에 등록된 리스너에는 이벤트 전파가 끝날 때까지 이벤트가 계속 전달됩니다. stopImmediatePropagation()
메서드는 여전히 다른 추가 리스너로 이벤트가 전달되지 못하게 합니다.
Flash Player의 디버거 버전 또는 ADL(AIR Debug Launcher)과 같이 런타임의 디버거 버전에서 내용을 실행하는 경우 포착되지 않는 오류가 발생하면 포착되지 않는 오류 대화 상자가 표시됩니다. 런타임 버전에서는 uncaughtError
이벤트에 대해 리스너가 등록된 경우에도 오류 대화 상자가 표시됩니다. 이러한 상황에서 대화 상자를 표시하지 않으려면 UncaughtErrorEvent 객체의 preventDefault()
메서드를 호출하십시오.
Loader 객체에 의해 로드된 내용이 AVM1(ActionScript 2) SWF 파일일 경우, AVM1 SWF 파일에서 잡히지 않은 오류는 uncaughtError
이벤트로 나타나지 않습니다. 또한 HTMLLoader 객체(Flex HTML 컨트롤 포함)에서 로드된 HTML 내용의 JavaScript 오류도 uncaughtError
이벤트로 나타나지 않습니다.
관련 API 요소
속성 | 정의 주체 | ||
---|---|---|---|
bubbles : Boolean [읽기 전용]
이벤트가 버블링 이벤트인지 여부를 나타냅니다. | Event | ||
cancelable : Boolean [읽기 전용]
해당 이벤트와 연관된 비헤이비어를 차단할 수 있는지 여부를 나타냅니다. | Event | ||
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
currentTarget : Object [읽기 전용]
이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. | Event | ||
error : * [읽기 전용]
포착되지 않는 오류와 연결된 오류 객체입니다. | UncaughtErrorEvent | ||
errorID : int [읽기 전용]
특정 오류와 연결된 참조 번호가 포함되어 있습니다. | ErrorEvent | ||
eventPhase : uint [읽기 전용]
이벤트 흐름에서 현재 단계입니다. | Event | ||
target : Object [읽기 전용]
이벤트 대상입니다. | Event | ||
text : String
textInput 이벤트의 경우, 입력한 문자 또는 일련의 문자입니다. | TextEvent | ||
type : String [읽기 전용]
이벤트 유형입니다. | Event |
메서드 | 정의 주체 | ||
---|---|---|---|
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
uncaughtError 이벤트에 대한 정보가 포함된 UncaughtErrorEvent 객체를 만듭니다. | UncaughtErrorEvent | ||
[재정의]
UncaughtErrorEvent 객체의 복사본을 하나 만들고 각 속성의 값을 원본과 동일하게 설정합니다. | UncaughtErrorEvent | ||
사용자 정의 ActionScript 3.0 Event 클래스에서 toString() 메서드를 구현하기 위한 유틸리티 함수입니다. | Event | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
이벤트에서 preventDefault() 메서드가 호출되었는지 여부를 확인합니다. | Event | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
이벤트의 기본 비헤이비어를 취소할 수 있는 경우, 그 비헤이비어를 취소합니다. | Event | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
이벤트 흐름에서 현재 노드 및 그 후속 노드에 있는 모든 이벤트 리스너가 처리되지 않도록 합니다. | Event | ||
이벤트 흐름에서 현재 노드의 후속 노드에 있는 모든 이벤트 리스너가 처리되지 않도록 합니다. | Event | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
[재정의]
UncaughtErrorEvent 객체의 모든 속성이 들어 있는 문자열을 반환합니다. | UncaughtErrorEvent | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
상수 | 정의 주체 | ||
---|---|---|---|
UNCAUGHT_ERROR : String = "uncaughtError" [정적]
uncaughtError 이벤트 객체의 type 속성 값을 정의합니다. | UncaughtErrorEvent |
error | 속성 |
error:*
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
포착되지 않는 오류와 연결된 오류 객체입니다. 일반적으로 객체의 데이터 유형은 다음 중 하나입니다.
- Error 인스턴스 또는 해당 하위 클래스 - 포착되지 않는 오류가
throw
문에 의해 만들어지는 동기 오류인 경우입니다. 이러한 동기 오류의 예는try..catch
블록을 사용하여 포착될 수 있는 오류입니다. - ErrorEvent 인스턴스 또는 해당 하위 클래스 중 하나 - 포착되지 않는 오류가 발생할 때 오류 이벤트를 전달하는 비동기 오류인 경우입니다.
단, error
속성은 모든 데이터 유형의 객체일 수 있습니다. ActionScript에서는 throw
문을 꼭 Error 객체와 함께 사용해야 한다는 규칙은 없습니다. 예를 들어 다음 코드는 컴파일 타임 및 런타임에서 모두 유효합니다.
throw new Sprite()
위의 throw
문이 try..catch
블록에서 포착되지 않는 경우 throw
문에서 uncaughtError
이벤트를 트리거합니다. 이 경우, 전달된 UncaughtErrorEvent 객체의 error
속성이 throw
문에서 만들어진 Sprite 객체가 됩니다.
따라서 uncaughtError
리스너에서 error
속성의 데이터 유형을 확인해야 합니다. 다음 예제에서는 이 확인 방법을 보여 줍니다.
function uncaughtErrorHandler(event:UncaughtErrorEvent):void { var message:String; if (event.error is Error) { message = Error(event.error).message; } else if (event.error is ErrorEvent) { message = ErrorEvent(event.error).text; } else { message = event.error.toString(); } }
error
속성에 Error 인스턴스(또는 Error 하위 클래스)가 포함된 경우 다음과 같이 내용이 실행되는 런타임의 버전에 따라 사용할 수 있는 오류 정보가 달라집니다.
디버거 버전의 런타임(예: 디버거 버전의 Flash Player 또는 AIR Debug Launcher(ADL))에서 실행되는 경우:
Error.getStackTrace()
메서드가 오류를 발생시키는 호출 스택을 반환합니다.Error.message
에는 전체 오류 메시지 텍스트가 포함됩니다.
비디버거 버전의 런타임에서 실행되는 경우:
Error.getStackTrace()
메서드가 오류를 발생시키는 호출 스택을 반환합니다. 하지만 호출 스택 정보에 소스 파일 이름 또는 줄 번호가 포함되어 있지 않습니다.Error.message
속성에는 간단한 버전의 오류 메시지가 포함됩니다. 이 메시지에는Error.errorID
및Error.name
속성의 조합이 포함되기도 합니다.
비디버거 버전의 런타임(Flash Player 11.4 이하 및 AIR 1.4 이하)에서 실행되는 경우:
Error.getStackTrace()
메서드가null
을 반환합니다.Error.message
속성에는 간단한 버전의 오류 메시지가 포함됩니다. 이 메시지에는Error.errorID
및Error.name
속성의 조합이 포함되기도 합니다.
Error 클래스의 다른 모든 속성 및 메서드는 모든 런타임 버전에서 사용할 수 있습니다.
error
속성이 ErrorEvent 인스턴스인 경우에는 호출 스택 정보를 사용할 수 없습니다.
구현
public function get error():*
UncaughtErrorEvent | () | 생성자 |
public function UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
uncaughtError
이벤트에 대한 정보가 포함된 UncaughtErrorEvent 객체를 만듭니다.
type:String (default = NaN ) — 이벤트 유형입니다.
| |
bubbles:Boolean (default = true ) — Event 객체가 이벤트 흐름의 버블링 단계에 참여하는지 여부를 결정합니다. 이벤트 리스너는 상속된 bubbles 속성을 통해 이 정보에 액세스할 수 있습니다.
| |
cancelable:Boolean (default = true ) — Event 객체를 취소할 수 있는지 여부를 결정합니다. 이벤트 리스너는 상속된 cancelable 속성을 통해 이 정보에 액세스할 수 있습니다.
| |
error_in:* (default = null ) — 포착되지 않는 또는 처리되지 않는 오류와 연결된 객체(정상적인 상황에서의 Error 또는 ErrorEvent 객체)입니다.
|
clone | () | 메서드 |
toString | () | 메서드 |
UNCAUGHT_ERROR | 상수 |
public static const UNCAUGHT_ERROR:String = "uncaughtError"
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
uncaughtError
이벤트 객체의 type
속성 값을 정의합니다.
참고: try 블록에 해당 이벤트 핸들러를 호출하는 이벤트 디스패처가 있으면 이벤트 핸들러에서 오류가 발생하는 경우 catch 블록이 해당 오류를 포착하지 않습니다. 이후에 발생하는 모든 오류는 LoaderInfo.uncaughtErrorEvents
를 수신하여 포착할 수 있습니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | true |
cancelable | true - 디버거 런타임 버전에서 포착되지 않는 오류 대화 상자가 표시되지 않도록 하는 설정을 취소합니다. |
currentTarget | 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. |
error | 포착되지 않은 오류입니다. |
target | 오류가 발생한 SWF와 연결된 LoaderInfo 객체입니다. |
text | 텍스트 오류 메시지입니다. |
uncaughtError
이벤트 핸들러를 정의합니다. 또한 클릭하면 포착되지 않는 오류 핸들러에 의해 포착되는 오류가 발생하는 버튼도 제공합니다.
생성자 코드에서는 LoaderInfo 객체의 uncaughtErrorEvents
속성에 의해 전달되는 uncaughtError
이벤트에 사용할 리스너를 등록합니다.
uncaughtErrorHandler()
메서드 코드에서는 error
속성의 데이터 유형을 확인하고 이에 따라 응답합니다.
package { import flash.display.Sprite; import flash.events.ErrorEvent; import flash.events.MouseEvent; import flash.events.UncaughtErrorEvent; public class UncaughtErrorEventExample extends Sprite { public function UncaughtErrorEventExample() { loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); drawUI(); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } private function drawUI():void { var btn:Sprite = new Sprite(); btn.graphics.clear(); btn.graphics.beginFill(0xFFCC00); btn.graphics.drawRect(0, 0, 100, 50); btn.graphics.endFill(); addChild(btn); btn.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(event:MouseEvent):void { throw new Error("Gak!"); } } }
<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" applicationComplete="applicationCompleteHandler();"> <fx:Script> <![CDATA[ import flash.events.ErrorEvent; import flash.events.MouseEvent; import flash.events.UncaughtErrorEvent; private function applicationCompleteHandler():void { loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } private function clickHandler(event:MouseEvent):void { throw new Error("Gak!"); } ]]> </fx:Script> <s:Button label="Cause Error" click="clickHandler(event);"/> </s:WindowedApplication>
uncaughtError
이벤트 핸들러를 정의합니다.
생성자 코드에서는 Loader 객체를 만들고 Loader 객체의 uncaughtErrorEvents
속성에 의해 전달되는 uncaughtError
이벤트에 사용할 리스너를 등록합니다.
uncaughtErrorHandler()
메서드 코드에서는 error
속성의 데이터 유형을 확인하고 이에 따라 응답합니다.
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.ErrorEvent; import flash.events.UncaughtErrorEvent; import flash.net.URLRequest; public class LoaderUncaughtErrorEventExample extends Sprite { private var ldr:Loader; public function LoaderUncaughtErrorEventExample() { ldr = new Loader(); ldr.load(new URLRequest("child.swf")); ldr.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } } }
Tue Jun 12 2018, 03:17 PM Z