2011-05-16 2 views
1

새로운 (ish) AS3 전역 오류 처리 클래스를 사용하려고합니다. Flex mxml 응용 프로그램 내에서 사용하려고합니다. 나는 전혀 작동하지 않습니다. 아래는 문제를 보여주는 전체 프로그램입니다. 이것을 Flash Player 10.2를 사용하고 Flex 4.5 SDK로 컴파일하도록 설정했습니다.Flex 4.0/4.5 전역 오류 처리

Flex SDK 4.0 및 4.5를 사용해 보았지만 두 경우 모두 오류가 발생합니다. 나는 명백한 무엇인가 여기에서 놓치고 있어야하다. 이것은 웹 페이지에 표시 될 일반 Flex SWF 파일입니다. 나는 UncaughtErrorEvent를 가져올 수있는 가정, 그때 설정에 이벤트 핸들러를 이런 짓을 할 것이다 :

if(systemManager.loaderInfo.hasOwnProperty("uncaughtErrorEvents")) {     
     IEventDispatcher(
      systemManager.loaderInfo["uncaughtErrorEvents"]).addEventListener(
       "uncaughtError", uncaughtErrorHandler); 
    } 

이 모두가 끔찍하게 미봉책 보이지만 나는 그것이 작동하지 않는 것을 제외하고 그와 함께 살 수! 필자는 웹을 샅샅이 뒤졌으며 필자의 맥락에서이 작업을 수행하는 방법을 설명하는 문서 나 예제를 찾을 수 없습니다. 어떤 충고?

전체 프로그램 : (난 당신이 다음을 통해 볼 권장)을 API에서

<?xml version="1.0" encoding="utf-8"?> 
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="onApplicationComplete();" 
        > 
     <fx:Declarations> 
      <!-- Place non-visual elements (e.g., services, value objects) here --> 
     </fx:Declarations> 
     <fx:Script> 
      <![CDATA[ 
       private function onApplicationComplete() : void { 
        systemManager.loaderInfo.uncaughtErrorEvents.addEventListener("uncaughtError", uncaughtErrorHandler); 
       } 
       private function uncaughtErrorHandler(event:Event) : void { 
        trace(event.toString()); 
       } 
      ]]> 
     </fx:Script> 
     <s:Button x="153" y="64" label="Trigger Error" id="triggerButton" click="throw new Error('myError')"/> 
    </s:Application> 
+0

사용해보십시오 systemManager 대신 stage.loaderInfo? http://stackoverflow.com/questions/3315904/global-error-handler-for-flash-player-10-1-not-working – Satish

+0

음, 그 스레드는 내가 가지고있는 문제를 확인합니다. addEventListener가 on 인 loaderInfo에 관계없이 작동하지 않습니다. –

답변

2

테이크 :

<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> 
+0

와우, 아무것도 더 무례한 반응! 필자는 코드가 직접 작성된 이후로 문서를 읽었습니다. 작동하지 않습니다. 다른 스레드에서 볼 수 있듯이 나는 혼자가 아닙니다. 필자는 API 문서를 읽고 다양한 블로그에서 5 가지 이상의 다른 제안을 시도한 후에 만 ​​게시했습니다. 함수 또는 모든 문서에 문제가 있습니다. 나는 이것이 작동하지 않는다는 것을 보여주는 30 라인의 완전한 프로그램을 가지고있다. –

+0

궁금한 점이 있습니까? 코드를 사용해 보셨습니까? 첫째, 컴파일되지 않았습니다. WindowedApplication을 Application으로 변경해야했습니다. 그런 다음 대상 FP를 10.1로 설정해야했습니다. 그런 다음 컴파일되었지만 정확한 결과를 내 코드로 제공했습니다. 이것은 또한 프로그램의 논리 오류입니다. 오류 처리기에서 event.preventDefault()를 호출해야합니다. 그래서 저는 제가 발견 할 수있는 모든 예제를 시도 했으므로 문서화에 너무 많은 믿음을두고 있다고 생각합니다. 아무도 예상대로 작동하지 않았습니다. 내 예제가 API ref의 API와 거의 동일하기 때문에 API 문서를 읽지 않았다고 결론을 내린 이유를 파악하려고합니다. –

+0

무례한 반응? 방금 API를 살펴 봐야한다고했습니다. 네가 해줬다면 좋았어.하지만 너는 그걸 언급하지 않았고 같은 코드를 보여줬다. 예, 시도해 보았습니다. 문서 (WindowedApplication은 Air이고 API는 minium FP가 10.1 임)를 따르면 잘 작동합니다. preventDefault()를 호출 할 필요가 * 없습니다 *, 오류 상자가 나타나지 않게하려면 추가 된 것입니다. 하지만 여기에 표시된 예는 완벽하게 작동합니다. –

3
<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/mx" 
          uncaughtError="uncaughtErrorHandler(event)" /> 

쉬운 방법 ...