AIR:为什么stage == null?

时间:2009-07-02 15:28:02

标签: flex air

我正在尝试在AIR应用上设置scaleMode。这是通过stage.scaleMode设置的。但是,当我尝试引用stage时,它返回null。我不知道为什么?

以下是整个应用:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import flash.display.StageDisplayState;
            private function init():void
            {
                var s:Stage = this.stage; //<<-- this.stage == null...why??
                s.scaleMode = StageScaleMode.EXACT_FIT;
            }
        ]]>
    </mx:Script>
</mx:WindowedApplication>

4 个答案:

答案 0 :(得分:15)

尝试使用windowComplete代替creationComplete。也:

  

[如果]您正在尝试添加   eventListeners来自舞台   你的申请的开始   执行,这只适用于   updateComplete()和   applicationComplete()。

来源:http://www.wietseveenstra.nl/blog/2007/02/understanding-the-flex-application-startup-event-order/

答案 1 :(得分:1)

尝试为Event.ADDED_TO_STAGEaddedToStage mxml属性添加事件侦听器。你应该可以参考舞台了。

答案 2 :(得分:1)

地狱,

您可以尝试使用

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
       xmlns:mx="http://www.adobe.com/2006/mxml" 
       creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import flash.display.StageDisplayState;
            private function init():void
            {
                this.systemManager.stage.scaleMode = StageScaleMode.EXACT_FIT;
            }
        ]]>
    </mx:Script>
</mx:WindowedApplication>

应该这样做:)

答案 3 :(得分:0)

为了安全起见,在Web和AIR应用程序中,我通常使用applicationComplete事件标记启动周期的完成,然后再查找stage对象。来自文档:

  

创建所有组件后   绘制,Application对象   调度applicationComplete   事件。这是最后一个事件   在应用程序期间发送   启动。

如果你等待applicationComplete,你可以确定一切都准备好了。