代码之家  ›  专栏  ›  技术社区  ›  Almas Adilbek

在flashas3中如何放置单次try-catch代码,以便捕获整个类中的任何错误?

  •  2
  • Almas Adilbek  · 技术社区  · 15 年前

    在Flash AS3中我想写单曲 试一试 块以捕获整个类中的任何错误。



    谢谢您!

    3 回复  |  直到 12 年前
        1
  •  8
  •   ktutnik    15 年前

    你不能!除了使用AOP方法之外,即使在AS3以外的其他语言中也没有这样简单的方法。

    编辑 -关于科门特

    其实这个想法是很自然的。。仍然需要手动捕获每个可能的错误。我给你举个例子。请注意,本示例的目的只是为了在较低层和较高层之间保持清晰。

    例如,您在中间层(您的业务流程)中有一个类:

    public class MyBussiness {
        public function loadImages(){
            //for example here is a block of method
            //possibly throws exception. 
        }
    
        public function getLoan(){
            //lets assume here too
        }
    }
    

    在更高的层(我假设在您的视图中是MXML)中,您捕获了如下异常:

    var myBussiness:MyBussiness = new MyBussiness():
    try {
        myBussiness.loadImages();
        //any other sequence process
        myBussiness.getLoan();
    }
    catch(error:Error){
        //here you process error
        //show it to user or make LOG
    }
    

    它仍然不能像你期望的那样变魔术,但这是最好的做法。 记住只在有可能抛出错误的代码上放置try catch 因为试抓很贵。

        2
  •  4
  •   Nev    12 年前

    最好的方法是使用try-catch:

    try{
      //your command
    } catch(e:Error){
      //your command
    }
    
        3
  •  1
  •   sergzach    8 年前

    您可以通过使用捕获程序中所有未处理的错误 UncaughtErrorEvent 班级。

    所以,也许这是你想要的。文档中有一个示例(您可以放置 addEventListener

    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!");
        }
    }
    

    }

    docs