43 votes

Comment attraper toutes les exceptions en Flex?

Quand je lance une application Flex dans le débogage de flash player j'obtiens une exception pop-up dès que quelque chose d'inattendu s'est produit. Toutefois, lorsqu'un client utilise l'application, il n'est pas d'utiliser le débogage de flash player. Dans ce cas, il n'obtient pas une exception pop-up, mais il UI n'est pas de travail.

Donc pour la prise en charge des raisons, je tiens à attraper toutes les exceptions qui peuvent se produire n'importe où dans l'INTERFACE utilisateur de Flex et de présenter un message d'erreur dans un Flex interne popup. À l'aide de Java, je voudrais juste encapsuler l'ensemble de l'INTERFACE utilisateur d'un code dans un bloc try/catch, mais avec MXML applications Flex, je ne sais pas où j'ai pu effectuer une telle générale try/catch.

52voto

Richard Szalay Points 42486

Il n'y a aucun moyen d'être informé sur les exceptions non traitées dans Flex 3. Adobe sont conscients du problème, mais je ne sais pas si elles ont l'intention sur la création d'une solution de contournement.

La seule solution actuelle est de mettre try/catch dans la logique des lieux et assurez-vous que vous êtes à l'écoute de l'ERREUR (ou la FAUTE de webservices) de l'événement pour tout ce qui les expédie.

Edit: de Plus, il est en fait impossible de rattraper une erreur dans un jeté d'un gestionnaire d'événement. J'ai connecté un bug sur le site Adobe Bug du Système.

Mise à jour 2010-01-12: Mondial de la gestion d'erreur est maintenant pris en charge dans Flash 10.1 et AIR 2.0 (à la fois en version bêta), et est réalisé en souscrivant à l' UNCAUGHT_ERROR cas de LoaderInfo.uncaughtErrorEvents. Le code suivant est pris à partir de l' exemple de code sur livedocs:

public class UncaughtErrorEventExample extends Sprite
{
    public function UncaughtErrorEventExample()
    {
        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
        }
    }

3voto

Peter V. Mørch Points 1589

Notez que ce bug FP-444 (ci-dessus) des liens vers d' http://labs.adobe.com/technologies/flashplayer10/features.html#developer que depuis Oct 2009 montre que ce sera possible à compter de l'article 10.1, qui, actuellement, Oct 28, 2009 est encore inédit - donc, je suppose que nous allons voir si cela est vrai quand il est libéré

3voto

aaaidan Points 2614

Alternative à accepté de répondre, à l'aide de try-catch. Plus lent, mais plus simple à lire, je pense.

try {
    loaderInfo.uncaughtErrorEvents.addEventListener("uncaughtError", onUncaughtError);
} catch (e:ReferenceError) {
    var spl:Array = Capabilities.version.split(" ");
    var verSpl:Array = spl[1].split(",");

    if (int(verSpl[0]) >= 10 &&
        int(verSpl[1]) >= 1) {
        // This version is 10.1 or greater - we should have been able to listen for uncaught errors...
        d.warn("Unable to listen for uncaught error events, despite flash version: " + Capabilities.version);
    }
}

Bien sûr, vous aurez besoin d'un up-to-date 10.1 playerglobal.cfc dans le but de compiler ce code avec succès: http://labs.adobe.com/downloads/flashplayer10.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X