无法将应用程序添加到displaylist

时间:2011-05-26 08:16:04

标签: flex swfloader

我正在尝试使用SWFLoader加载应用程序并将加载的应用程序添加到我的Displaylist。

public function onComplete(e:Event):void {
    someContainer.addChild((e.target.content));
}

//somewhere in main
var loader: SWFLoader = new SWFLoader();
loader.addEventListener(Event.COMPLETE, onComplete);
loader.load(urlToSwf);

我收到错误消息

cannot convert _Main_mx_managers_SystemManager@c513eb9 to mx.core.IUIComponent 

有人可以告诉我为什么这不起作用或我如何解决这个问题?

谢谢, SIMS

3 个答案:

答案 0 :(得分:3)

首先,我不建议您将Flex应用程序加载到其他Flex应用程序中。现在可以使用Flex框架中的模块。您可以阅读更多详细信息here

特别是你应该read addChild() documentation

  

注意:虽然孩子的参数是   方法指定为类型   DisplayObject,参数必须   实现IUIComponent接口   作为容器的子项添加。   所有Flex组件都实现了这一点   接口

因此,您可以先添加UIComponent,然后在那里添加系统管理员。

答案 1 :(得分:1)

出现问题的原因是您尝试添加到舞台的是SystemManager类型,当然您想将应用程序添加到显示列表中。

所以试试这个:

<mx:Script>
    <![CDATA[
        import mx.events.FlexEvent;
        import mx.managers.SystemManager;

        private var _systemManager:SystemManager;

        protected function onLoaderComplete(event:Event):void
        {
            _systemManager = SystemManager(loader.content);
            _systemManager.addEventListener(FlexEvent.APPLICATION_COMPLETE, onApplicationComplete);
        }

        private function onApplicationComplete(event:FlexEvent):void
        {
            mainContainer.addChild(_systemManager.application);
        }
    ]]>
</mx:Script>

<mx:SWFLoader id="loader" source="main.swf" width="800" height="600" autoLoad="true" complete="onLoaderComplete(event)"/>

<mx:VBox id="mainContainer"/>

干杯

答案 2 :(得分:0)

只需将SWFLoader添加到容器中即可。

public function loader_completeHandler(event:Event):void
{
    var loader:SWFLoader = event.target as SWFLoader;
    someContainer.addChild(loader);
}

//somewhere in main
var loader:SWFLoader = new SWFLoader();
loader.addEventListener(Event.COMPLETE, loader_completeHandler);
loader.load(urlToSwf);