No Flash AS3 Como colocar o código de captura de Try Single, para capturar algum erro em toda a classe?

StackOverflow https://stackoverflow.com/questions/3455577

Pergunta

Em flash as3 eu quero escrever o single tente pegar Bloqueie para capturar erros em toda a classe.
Por exemplo, tenho muitas funções em myclass.as. Não quero escrever em cada função, tente os blocos de captura para capturar erros nesta função.
Existe algum método para fazer isso?

Obrigada!

Foi útil?

Solução

Você não pode! Não existe uma maneira tão fácil como essa, mesmo em outros idiomas, exceto que eles usam a abordagem da AOP para fazer isso.

A prática recomendada é apenas deixar as aulas borbulhar o erro (exceção) e deixar a camada mais alta capturar e processar o erro.

EDITAR - Em relação ao comente

Na verdade, a ideia é a maneira natural. Ainda precisa capturar manualmente todos os erros possíveis. Vou te dar um exemplo. Observe que o objetivo do exemplo apenas para clareza entre camada inferior e camada superior.

Por exemplo, você tem uma aula na camada média (seu processo de negócios):

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

    public function getLoan(){
        //lets assume here too
    }
}

Na camada higer (presumo que, em sua opinião, MXML), você pega a exceção como abaixo:

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
}

Ainda não pode fazer uma mágica como você espera, mas é a melhor prática. Rember só coloque a captura, tente a captura apenas no código que tem a possibilidade de causar erro Porque tente capturar é caro.

Outras dicas

A melhor maneira é usar o Try Catch:

try{
  //your command
} catch(e:Error){
  //your command
}

Você pode capturar todos os erros não tratados em seu programa usando UncaughtErrorEvent classe.

Então, pode ser o que você quer. Há um exemplo dos documentos (você pode colocar addEventListener no construtor da sua classe principal):

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

}

Veja o documentos, por favor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top