2 votes

adobe flash buider (flex4) : Error #2025 or Error : addChild() is not available in this class. A la place, utilisez addElement()

Je suis totalement novice en matière de Flex, alors je vous prie de m'excuser pour mon ignorance. J'ai cherché une réponse mais je n'ai rien trouvé qui semble faire l'affaire.

Ce que j'essaie de faire : porter cet exemple http://www.adobe.com/devnet/air/flex/articles/flex_air_codebase_print.html à Flash Builder 4.

Tout semble aller bien, sauf pour une chose. Lorsque j'utilise le code original de l'application Air

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       creationComplete="onApplicationComplete()">
<fx:Script>
    <![CDATA[
        private static const neededForCompilation:AirGeneralImplementation = null;
        private function onApplicationComplete():void
        {
            var can:MainCanvas = new MainCanvas();
            this.addChild(can); 
            can.labelMessage = "Loaded in an AIR Application ";
        }
    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

</s:WindowedApplication>

J'obtiens cette erreur d'exécution

Erreur : addChild() n'est pas disponible dans cette classe. A la place, utilisez addElement() ou modifiez le skin, si vous en avez un. à l'adresse spark.components.supportClasses::SkinnableComponent/addChild()[ E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\supportClasses\SkinnableComponent.as :1038]

Si je remplace le code par

this.addElement(can) ;

Tout se charge bien, mais la première fois que j'essaie d'appuyer sur l'un des boutons de la toile principale, j'obtiens l'erreur d'exécution suivante

ArgumentError : Erreur n°2025 : Le DisplayObject fourni doit être un enfant de l'appelant. at flash.display::DisplayObjectContainer/getChildIndex() at mx.managers::SystemManager/getChildIndex()[ E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\SystemManager.as :1665] at mx.managers.systemClasses::ActiveWindowManager/mouseDownHandler()[ E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\systemClasses\ActiveWindowManager.as :437]

voici le code super simple pour le canevas principal

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="init();">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script source="main.as" />
    <mx:Label id="lblMessage" text="The UI from the shared Flex app BothCode" x="433" y="112"/>
    <s:Button x="433" y="141" click="saveFile();" label="Save File"/>
    <s:Button x="601" y="141" click="GeneralFactory.getGeneralInstance().airOnlyFunctionality();" label="Air Only"/>
</s:Application>

Toute aide serait immensément appréciée. Et toute indication sur la manière de configurer un projet pouvant être compilé à la fois dans Air et dans Flash tout en partageant le même code, le tout pour Flex 4, serait également très appréciée.

Merci !

2voto

phil mccull Points 3484

J'ai rencontré le même problème en utilisant ce tutoriel pour Flex 4. J'ai fait la même chose que vous et utilisé le composant <s:Application> pour le Canvas principal. Cependant, le tutoriel utilise une <mx:VBox>, la solution que j'ai trouvée était de changer le Canvas principal d'une <s:Application> à une <s:Group>. Le problème semble être l'intégration d'une application dans une application.

0voto

flexwizz Points 26

Le code de ce lien a été écrit en utilisant le sdk flex 3.5 ou inférieur. Vous utilisez le nouveau sdk flex 4 (qui est la version par défaut de Flash Builder). Vous pouvez faire ce qui suit :
1. entrez dans le code et effectuez toutes les modifications nécessaires pour qu'il fonctionne avec le sdk de Flex 4.
2. créez un nouveau projet en utilisant le sdk Flex 3 (sélectionnez "Use a specific SDK" et choisissez le Flex 3 dans la liste déroulante de la fenêtre "New Project").
Je suggérerais d'opter pour la deuxième option, de faire en sorte que cela fonctionne et une fois que vous aurez fait un pas un peu plus profond dans le flex 4, vous pourrez faire la première option.

A la vôtre.

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