• flex的stage


    现在我们先看看代码,下面的代码装在creationComplete事件中调用init()来启动全屏.
    1. <?xml version="1.0" encoding="utf-8"?>   
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"    
    3.     layout="absolute"  
    4.     creationComplete="init()"  
    5.     >   
    6.     <mx:Script>   
    7.         <![CDATA[   
    8.             private function init():void{   
    9.                 stage.displayState = StageDisplayState.FULL_SCREEN;    
    10.             }   
    11.         ]]>   
    12.     </mx:Script>   
    13. </mx:Application>  

    现在保存运行一下swf,却有TypeError..详细信息如下
    1. Main Thread (Suspended: TypeErrorError #1009: 无法访问空对象引用的属性或方法。)     
    2.     swf_fullscreen/init     
    3.     swf_fullscreen/___swf_fullscreen_Application1_creationComplete     
    4.     flash.events::EventDispatcher/dispatchEventFunction [no source]     
    5.     flash.events::EventDispatcher/dispatchEvent [no source]     
    6.     mx.core::UIComponent/dispatchEvent     
    7.     mx.core::UIComponent/set initialized     
    8.     mx.managers::LayoutManager/doPhasedInstantiation     
    9.     Function/http://adobe.com/AS3/2006/builtin::apply [no source]     
    10.     mx.core::UIComponent/callLaterDispatcher2     
    11.     mx.core::UIComponent/callLaterDispatcher    

    我们把init()修改一下,如果
    1. private function init():void{   
    2.     trace(stage)   
    3. }  

    运行保存运行swf,发现输入null,奇怪的事情发生了..stage竟然为null,那进行stage.displayState当然就报错了...
    再次修改程序,使用click调用init(),stage正常输出,那问题大概就是creationComplete调用时,stage初始化..

    后来网上查了一下..发现了一个叫callLater的函数,他的功能大概是..进入下一帧的时候,执行函数,我们再次修改代码:
    1. <?xml version="1.0" encoding="utf-8"?>   
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"    
    3.     layout="absolute"  
    4.     creationComplete="callLater(init)"  
    5.     >   
    6.     <mx:Script>   
    7.         <![CDATA[   
    8.             private function init():void{   
    9.                 stage.displayState = StageDisplayState.FULL_SCREEN;    
    10.             }   
    11.         ]]>   
    12.     </mx:Script>   
    13. </mx:Application>  
    我们在creationComplete事件里,使用callLater(init)来调用init,让init在进入下一侦的时候再全屏..
    保存运行swf,问题解决....

    ps:另外swf还可以使用fscommand("fullscreen", "true");来进行全屏..这里只是主要讨论stage为null的问题.
  • 相关阅读:
    IO多路复用 IO异步
    你没听说过的协程
    事件驱动和IO操作
    堡垒机前戏——paramiko
    听说过的多进程,多线程到底是什么鬼
    socket套接字
    看见就烦的异常
    struts2值栈内部数据结构详解
    hibernate一级缓存的源码初窥
    使用自定义标签模拟jstl的<c:for each>标签
  • 原文地址:https://www.cnblogs.com/jiahuafu/p/1428496.html
Copyright © 2020-2023  润新知