2011-10-06 3 views

답변

2

당신은 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 디스패처에 의해 릴레이받을 캐치되지 않는 오류를 수신하는 다양한 종류의 모든 이벤트를 잡을 수 있도록

+0

! 그러나 캐치되지 않은 예외가 발생하면 사용자에게 오류 메시지 (TextField)를 표시하기 위해'loaderInfo.uncaughtErrorEvents.addEventListener (UncaughtErrorEvent.UNCAUGHT_ERROR, errorHandler); ' 을 사용하여 aleady입니다. '전체 메서드에서 오류 이벤트가 아닌'특정 메서드 (UrlLoader.load())의 모든 유형의 오류 이벤트를 처리하는 방법을 알고 싶습니다. 사용자에게 오류 메시지가 표시되지 않도록 UrlLoader.load()의 오류 이벤트를 무시하고 싶습니다. –

+1

@js_ 그런 다음 관련 코드 주위에 try/catch 블록을 사용하십시오. 그것이 바로 그 때문입니다! 그렇지 않으면, 전역'UncaughtErrorEvents'를 사용하고 핸들러에서 특정'Error' 타입을 걸러 낼 수 있습니다. 참고로, 비동기 IO 오류가 처리하려는 경우 특정 로더에 적절한 이벤트 처리기를 추가해야합니다. – Peter

+1

감사합니다. 승인. 비동기 함수의 오류 이벤트를 처리 할 적절한 이벤트 처리기를 추가합니다. (나는 SECURITY_ERROR 이벤트와 UrlLoader에 대한 IO_ERROR 이벤트를 처리해야한다고 생각합니다.) 그러나 Adobe는 향후 Adobe에서 새로운 오류 이벤트를 추가하거나 이미 UrlLoader 문서에 기록되지 않은 다른 오류 이벤트가있을 수 있다는 점에 대해 매우 우려하고 있습니다. . 걱정해야합니까? –

0

응용 프로그램에서 모든 오류를 catch하려면 try-catch 블록을 사용해야합니다. addEventListener를 사용하여 특정 객체에 리스너를 추가하면 오류 만 잡을 수 있습니다.

+0

감사합니다!하지만'try catch'는 에러 이벤트가 비동기 프로세스이기 때문에 에러 이벤트를 잡을 수 없다고 생각합니다. 덕분에 –

0

각 이벤트 유형은 다른 String로 등록됩니다. 특히 이것은 DisplayObjectloaderInfo 속성 @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 
    } 
} 

...

UncaughtErrorEventUncaughtErrorEvents 의 인스턴스에 의해 전달되는 객체 (ErrorEvent 연장) 잡히지 않은 오류 이 발생하면 클래스에 추가됩니다. 잡히지 않은 오류는 블록 외부에서 오류가 발생하거나 ErrorEvent 개체가 등록 청취자없이 전달 될 때 발생합니다. 잡히지 않은 오류 이벤트 기능은 "글로벌 오류 처리기"라고 종종 말하면서 입니다.

UncaughtErrorEvents 객체가 두 가지 방법으로 액세스 할 수 있습니다 ...

LoaderInfo.uncaughtErrorEvents

  • - 같은 SWF에 정의 된 코드에서 포착되지 않은 오류를 감지합니다.

    처리되지 않은 오류가이 Loader 객체에 의해로드 년대 SWF에서 발생할 때 uncaughtError 이벤트를 전달하는 객체입니다. try ... 외부에서 오류가 발생하면 잡히지 않은 오류가 발생합니다.블록을 catch하거나 등록 된 리스너가없는 ErrorEvent 객체가 전달되는 경우

    Loader 객체의 uncaughtErrorEvents 속성은 이벤트를 전달하고, 직접 전달하는 이벤트는 버블 링하지 않습니다. 대상 단계에서 uncaughtErrorEvent를 보내지 않습니다. 만 캡처 및 버블 링 단계에서 이벤트를 전달합니다. 현재 SWF (Loader 객체 이 정의 된 SWF)에서 캐치 오류 을 검색하려면 대신 LoaderInfo.uncaughtErrorEvents 속성을 사용하십시오.

  • Loader.uncaughtErrorEvents

    - 은 Loader 객체에 의해로드 된 SWF에 정의 된 코드에서 포착되지 않은 오류를 감지합니다.

    처리되지 않은 오류가이 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() 메서드를 호출합니다.