2010-08-11 23 views

Répondre

7

vous ne pouvez pas! il n'y a pas de manière aussi simple que cela dans AS3, sauf qu'ils utilisent l'approche AOP pour le faire. La meilleure pratique consiste simplement à laisser les classes filtrer l'erreur (exception) et laisser la couche supérieure capturer et traiter l'erreur.

EDIT - en ce qui concerne coment

En fait, l'idée est la façon naturelle .. encore vous devez attraper manuellement toutes les erreurs possibles. Je vais vous donner un exemple. Notez que le but de l'exemple seulement pour la clarté entre la couche inférieure et la couche supérieure.

par exemple, vous avez une classe dans la couche intermédiaire (Your Business):

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

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

dans la couche higer (je suppose que dans votre vue - MXML) vous attrapez l'exception comme ci-dessous:

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 
} 

encore il ne peut pas faire une magie comme vous vous attendez mais c'est la meilleure pratique. Rember seulement mis try seulement attraper sur le code qui a la possibilité de lancer l'erreur parce que try catch est cher.

+0

Ou laissez le calque supérieur l'ignorer aussi, non? Flash n'affichera pas d'erreurs s'il n'est pas en mode débogage, n'est-ce pas? –

+0

ktutnik, ce serait tellement gentil si vous pouvez me montrer petit ex à faire comme ça. Comment puis-je attraper l'erreur par classe de couche supérieure, qui comprend myClass.as ?! –

+0

Merci, ktutnik. C'est ainsi que je vais implémenter le problème des erreurs de capture. bonne chance –

4

La meilleure façon utilise des captures d'essai:

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

Vous pouvez attraper des erreurs tous ne sont pas traités dans votre programme en utilisant UncaughtErrorEvent classe.

Alors, peut-être que c'est ce que vous voulez. Il est un exemple de la documentation (vous pouvez placer addEventListener dans le constructeur de votre classe principale):

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

}

Voir la docs, s'il vous plaît.