IOErrorEvent.IO_ERROR
, SecurityErrorEvent.SECURITY_ERROR
및 기타 모든 오류 이벤트와 같이 모든 유형의 오류 이벤트를 addEventListener(ErrorEvent.ERROR, handler)
이 처리합니까?
try catch(e:Error)
의 addEventListener()
버전을 찾고 있는데 (오류 : 모든 유형의 오류를 catch 할 수 있음).
addEventListener (ErrorEvent.ERROR, handler)는 모든 유형의 오류 이벤트를 actionscript3에 처리합니까?
답변
당신은 UncaughtErrorEvents
개체에 오류 핸들러를 추가 할 수 있습니다 :이 플래시 플레이어 10.1 이상 만 가능합니다
loaderInfo.uncaughtErrorEvents.addEventListener(
UncaughtErrorEvent.UNCAUGHT_ERROR, errorHandler);
function errorHandler(e:UncaughtErrorEvent):void {
if(event.error is Error) {
// handle error
}
// suppress error dialog
e.preventDefault();
}
.
여기에서 자세한 정보를 찾을 수 있습니다 : flash.events.UncaughtErrorEvents
이를로드 된 SWF에서 예외를 처리에 특히 도움이 될 수 있습니다. 내가 좋은 이유가 있다고 가정? 유일한 방법은 특별한 UncaughtErrorEvents
디스패처에 의해 릴레이받을 캐치되지 않는 오류를 수신하는 다양한 종류의 모든 이벤트를 잡을 수 있도록
응용 프로그램에서 모든 오류를 catch하려면 try-catch 블록을 사용해야합니다. addEventListener를 사용하여 특정 객체에 리스너를 추가하면 오류 만 잡을 수 있습니다.
감사합니다!하지만'try catch'는 에러 이벤트가 비동기 프로세스이기 때문에 에러 이벤트를 잡을 수 없다고 생각합니다. 덕분에 –
각 이벤트 유형은 다른 String
로 등록됩니다. 특히 이것은 DisplayObject
의 loaderInfo
속성 @DisplayObject.loaderInfo.uncaughtErrorEvents
에 있습니다. 캐치되지 않는 오류가 발생하는 3 가지 방법을 증명
... Adobe's documentation 가입일
private var loader:Loader = new Loader();
public function MyDocumentClass()
{
// 1: Listen for all errors in the application:
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
// 2: Listen for errors from the child swf being loaded:
loader.load(new URLRequest("file.swf"));
loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
// 3: Listen for errors from Loader doing the loading:
loader.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
// This seems like it would work, but wasn't working in tests I ran:
stage.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
}
}
...
UncaughtErrorEvent
UncaughtErrorEvents
의 인스턴스에 의해 전달되는 객체 (ErrorEvent
연장) 잡히지 않은 오류 이 발생하면 클래스에 추가됩니다. 잡히지 않은 오류는 블록 외부에서 오류가 발생하거나ErrorEvent
개체가 등록 청취자없이 전달 될 때 발생합니다. 잡히지 않은 오류 이벤트 기능은 "글로벌 오류 처리기"라고 종종 말하면서 입니다.
UncaughtErrorEvents
객체가 두 가지 방법으로 액세스 할 수 있습니다 ...
LoaderInfo.uncaughtErrorEvents
- - 같은 SWF에 정의 된 코드에서 포착되지 않은 오류를 감지합니다.
처리되지 않은 오류가이 Loader 객체에 의해로드 년대 SWF에서 발생할 때 uncaughtError 이벤트를 전달하는 객체입니다. try ... 외부에서 오류가 발생하면 잡히지 않은 오류가 발생합니다.블록을 catch하거나 등록 된 리스너가없는 ErrorEvent 객체가 전달되는 경우
Loader 객체의 uncaughtErrorEvents 속성은 이벤트를 전달하고, 직접 전달하는 이벤트는 버블 링하지 않습니다. 대상 단계에서 uncaughtErrorEvent를 보내지 않습니다. 만 캡처 및 버블 링 단계에서 이벤트를 전달합니다. 현재 SWF (Loader 객체 이 정의 된 SWF)에서 캐치 오류 을 검색하려면 대신 LoaderInfo.uncaughtErrorEvents 속성을 사용하십시오.
- 은 Loader 객체에 의해로드 된 SWF에 정의 된 코드에서 포착되지 않은 오류를 감지합니다.Loader.uncaughtErrorEvents
처리되지 않은 오류가이 LoaderInfo 객체의 SWF 파일의 코드에서 발생할 때 uncaughtError 이벤트를 전달하는 객체입니다. 감추어 진 오류는 try..catch 블록 외부에서 오류가 발생하거나 등록 된 청취자없이 ErrorEvent 객체가 전달 될 때 발생합니다.
이 속성은이 LoaderInfo 과 연결된 SWF로드가 완료 될 때 만들어집니다. 그때까지 uncaughtErrorEvents 속성은 입니다. ActionScript 전용 프로젝트에서는 SWF 파일의 기본 클래스의 생성자 함수를 실행하는 동안 또는 그 후에이 속성 에 액세스 할 수 있습니다. Flex 프로젝트의 경우 applicationComplete 이벤트가 인 경우 uncaughtErrorEvents 속성을 사용할 수 있습니다. Adobe's documentation...
에서
몇 가지 중요한 사항 uncaughtError 이벤트가 발생, 이벤트가 처리되는 경우에도, 실행 오류가 발생한 호출 스택에 계속되지 않습니다. 오류가 동기 오류 인 경우 오류가 발생한 함수에 남아있는 코드는 실행되지 않습니다. 결과적으로 잡히지 않은 오류 이벤트가 발생하면 응용 프로그램이 불안정한 상태의 이 될 가능성이 있습니다 가능성이 있습니다. 잡히지 않은 오류에는 많은 원인이있을 수 있기 때문에 사용할 수있는 기능을 예측하는 것은 불가능합니다. 예를 들어 응용 프로그램이 네트워크 작업 또는 파일 작업을 실행할 수 있습니다. 그러나 이러한 작업에는 반드시 을 사용할 수 없습니다. 캐치되지 않는 오류가 발생하면 catch되지 않는 오류 대화 상자가 나타납니다 예 : Flash Player 또는 AIR 디버그 런처 (ADL), 의 디버거 버전 로
하는 내용은 런타임의 디버거 버전에서 실행됩니다. 런타임 버전의 경우 청취자 이 uncaughtError 이벤트에 대해 등록 된 경우에도 오류 대화 상자가 나타납니다. 이 상황에서 대화 상자가 나타나지 않게하려면 UncaughtErrorEvent 객체의 preventDefault() 메서드를 호출합니다.
! 그러나 캐치되지 않은 예외가 발생하면 사용자에게 오류 메시지 (TextField)를 표시하기 위해'loaderInfo.uncaughtErrorEvents.addEventListener (UncaughtErrorEvent.UNCAUGHT_ERROR, errorHandler); ' 을 사용하여 aleady입니다. '전체 메서드에서 오류 이벤트가 아닌'특정 메서드 (UrlLoader.load())의 모든 유형의 오류 이벤트를 처리하는 방법을 알고 싶습니다. 사용자에게 오류 메시지가 표시되지 않도록 UrlLoader.load()의 오류 이벤트를 무시하고 싶습니다. –
@js_ 그런 다음 관련 코드 주위에 try/catch 블록을 사용하십시오. 그것이 바로 그 때문입니다! 그렇지 않으면, 전역'UncaughtErrorEvents'를 사용하고 핸들러에서 특정'Error' 타입을 걸러 낼 수 있습니다. 참고로, 비동기 IO 오류가 처리하려는 경우 특정 로더에 적절한 이벤트 처리기를 추가해야합니다. – Peter
감사합니다. 승인. 비동기 함수의 오류 이벤트를 처리 할 적절한 이벤트 처리기를 추가합니다. (나는 SECURITY_ERROR 이벤트와 UrlLoader에 대한 IO_ERROR 이벤트를 처리해야한다고 생각합니다.) 그러나 Adobe는 향후 Adobe에서 새로운 오류 이벤트를 추가하거나 이미 UrlLoader 문서에 기록되지 않은 다른 오류 이벤트가있을 수 있다는 점에 대해 매우 우려하고 있습니다. . 걱정해야합니까? –