Dans Flash AS3 je veux écrire le seul essayer d'attraper le bloc afin d'attraper les erreurs dans la classe entière.
Par exemple, j'ai beaucoup de fonctions dans myClass.as. Je ne veux pas écrire dans chaque fonction essayer d'attraper des blocs afin d'attraper des erreurs dans cette fonction.
Existe-t-il des méthodes pour cela?
Merci beaucoup!Dans flash AS3 Comment mettre un code de capture simple try, afin d'attraper des erreurs dans toute la classe?
Répondre
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.
La meilleure façon utilise des captures d'essai:
try{
//your command
} catch(e:Error){
//your command
}
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.
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? –
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 ?! –
Merci, ktutnik. C'est ainsi que je vais implémenter le problème des erreurs de capture. bonne chance –