Aide - Recherche - Membres - Calendrier
Version complète : Try - Catch
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
Moustik78
Bonjour à tous !

J'ai un soucis que je n'arrive pas à élucider. Je fais quelques manipulations sur des composants, et il arrive que des erreurs remontent. Avec des try - Catch, je devrai pouvoir contourner ce problème, mais seulement voilà, ça ne marche pas.

Voici un exemple, mon code est bien plus compliqué :

CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:TabNavigator id="myTabNav" width="100%">
        <mx:Panel id="pan1" label="Panel 1" />
        <mx:Panel id="pan2" label="Panel 2"/>
        <mx:Panel id="pan3" label="Panel 3"/>
    </mx:TabNavigator>
        
    <mx:Button label="Supprimer panel 2" click="deletePanel2()" />

    <mx:Script>
        <![CDATA[
            private function deletePanel2 () : void
            {
                try {
                    myTabNav.removeChild(pan2);
                }
                catch ( e : ArgumentError ) {
                    trace ("L'erreur est catchée");
                }
            }
        ]]>
    </mx:Script>


</mx:Application>


Dans cet exemple, il me suffirait de faire un test d'existance, mais dans mon projet, cela m'est impossible. ce que je ne comprend pas, c'est que je suis censé attraper l'erreur avant qu'elle ne survienne :/
Fusion
Le code est incorrect : tu devrais mettre

CODE
   <mx:Button label="Supprimer panel 2" click="deletePanel2(event)" />


Et ensuite :

CODE
            private function deletePanel2 (event:MouseEvent) : void


Quand tu oublies des arguments attendus par le Flex, que tu utilises des variables indéfinies dans un Alert, ou des chsoes du genre, Flex a des réponses très bizarres... Les Alert ne s'affichent pas, etc...
Moustik78
Ah une bonne habitude à prendre. J'avais déjà vu ça en effet, mais comme ça marchait jusqu'à présent comme ça icon_rolleyes.gif

Bref, j'ai fait cette modification, mais ça ne semble pas intérférer avec le try - Catch. Si tu essaies chez toi ce bout de code, ça fonctionne? En cliquant deux fois de suite sur le bouton, de sorte à demander à l'application de supprimer un panel qui n'est plus un enfant du TabNavigator.
Tonic
le problème, c'est que l'erreur à soulever, n'est peut être pas de type "ArgumentError", donc il ne passe pas dans le catch.

Commence par typer en "Error" pour voir vraiment l'erreur soulevée.
Moustik78
Et bien j'ai bien un ArgumentError soulevé, mais même en essayant d'attraper un simple type Error, l'erreur passe à travers les mailles.

J'ai réussi à contourner le problème par un test, mais je n'arrive pas à comprendre pourquoi le try - catch ne marche pas :/
Tonic
Dans ta fonction, commence par tracer "pan2".

J'ai un doute quant à son existence. En effet, tant que tu n'as pas clické pour afficher ce panel du tabNavigator, celui ci n'est pas instancié.
Fusion
En ce qui me concerne, j'ai la version debug de Flash Player 9, et au premier clic, ça efface bine le Tab. Au deuxième, j'obtiens le message d'erreur du Flash Player dans la fenêtre grise

CODE
ArgumentError: Error #2025: Le DisplayObject indiqué doit être un enfant de l'appelant.
    at flash.display::DisplayObjectContainer/getChildIndex()
    at mx.core::Container/getChildIndex()
    at mx.containers::ViewStack/::childRemoveHandler()
    at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()
    at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::removingChild()
    at mx.core::Container/removeChild()
    at RemoveTab/::deletePanel2()
    at RemoveTab/___Button1_click()


Et ensuite seulement j'ai le trace.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.