Stage Null问题解决
当使用stage时,总是会报错,一直不知道错在那里,现在终于把这个问题解决了,原来stage是显示对象的属性,位于显示列表中的显示对象的stage才可以引用舞台属性stage,显示列表中的对象即为用addChild()方法添加的对象。如果对象没有在显示列表中,那么stage属性是null,所以总是报错。
下面就分情况来解决这个问题:
一、在mxml中使用stage
(1)当在application标签事件中使用stage的时候,像从applicaiton 中的 preinitialize,initialize,creationComplete 事件处理函数里面 获取 stage, 这样肯定是null, 此时applicaiton实例还没有加入 stage,Application实例加入到舞台后,派发ApplicationComplete事件。所以,应该在ApplicationComplete 事件派发后获取 stage。应该写在 apllicationComplete 的分派事件中。
(2)我们可以使用下一帧函数,及延迟调用。
我们在creationComplete事件里,使用callLater(init)来调用init,让init在进入下一帧的时候在使用stage。..
二、使用监听函数,完整代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="appComplete();">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
privatefunction appComplete():void{
if(stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE,init);
}
privatefunction init(e:Event=null):void{
Alert.show("jin le");
Alert.show(stage.stageWidth+"");
}
]]>
</mx:Script>
<mx:TextInput x="567" y="149" id="t2"/>
</mx:Application>
这里使用了一个事件,添加到舞台事件Event.ADDED_TO_STAGE ,然后在事件处理函数里面就可以使用stage。