adobe flash builder(flex 4):错误#2025或错误:添加Child()在此类中不可用。相反,使用addElement()

时间:2010-05-21 03:58:11

标签: flex flash air flex4

我是Flex的全新手,所以为我的愚蠢道歉。我已经找到了答案,但没有找到任何似乎正在做的事情。

我正在尝试做什么:移植此示例http://www.adobe.com/devnet/air/flex/articles/flex_air_codebase_print.html 到Flash Builder 4。

一切似乎都很好,但有一件事。当我使用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>

我收到此运行时错误

  

错误:addChild()不可用   这个班。相反,使用addElement()   或修改皮肤,如果有的话。   在   spark.components.supportClasses :: SkinnableComponent /的addChild()[E:\ dev的\ 4.0.0 \框架\项目\火花\ SRC \火花\部件\ supportClasses \ SkinnableComponent.as:1038]

如果我用

代替代码

this.addElement(can);

一切都很好,但是当我第一次尝试按下主画布上的任何按钮时,我得到以下运行时错误

  

ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子级。       在flash.display :: DisplayObjectContainer / getChildIndex()       在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]

这是主画布的超级简单代码

<?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>

任何帮助都会非常感激。任何指向如何设置可以在Air和Flash中编译同时共享相同代码的项目的指针,对Flex 4来说都是非常值得赞赏的。

谢谢你!

2 个答案:

答案 0 :(得分:2)

我使用Flex 4的教程遇到了同样的问题。我做了同样的事情并使用了&lt; s:Application&gt;主画布的组件。然而,本教程使用&lt; mx:VBox&gt;,我发现的解决方案是从&lt; s:Application&gt;更改主画布。到&lt; s:Group&gt;。问题似乎是在应用程序中嵌入应用程序。

答案 1 :(得分:0)

该链接上的代码是使用flex 3.5 sdk或更低版本编写的。您正在使用新的flex 4 sdk(这是Flash Builder的默认设置)。 您可以执行以下操作:
1.进入代码做任何必要的更改,使其适用于flex 4 sdk。
2.使用flex 3 sdk设置新项目(选择“使用特定SDK”,然后从“新建项目”窗口的下拉框中选择Flex 3)
我建议选择第二个选项,让它工作,一旦你进入flex 4,你可以做第一个选项。

干杯。