无法访问空对象引用的错误

 

  1. public function MousebombV9Index() {
  2. init();
  3. }
  4. private function init():void {
  5. //***其他语句….
  6. this.addEventListener(Event.ADDED_TO_STAGE,addStageHandler);
  7. }
  8. private function addStageHandler(e:Event):void {
  9. //舞台左上对齐
  10. stage.scaleMode = StageScaleMode.NO_SCALE;
  11. stage.align = StageAlign.TOP_LEFT;
  12. }


 

 

 

 

package{
    import flash.display.MovieClip;
    import flash.events.Event;
    public class  testClass extends MovieClip{
            public function testClass():void
            {
            
this.addEventListener(Event.ADDED_TO_STAGE,onStageHandler);
            }
              priatve function onStageHandler(evt:Event)
                {
                init()
                this.removeEventListener(Event.ADDED_TO_STAGE,onStageHandler);
                }
                priatve function init():void
               {
                //子SWF的主体构CODE放这里.
              //对stage属性的引用
              }
    }//endclass
}//endpackage


 

 

这两天看AS3 cookbook和AS3的帮助文档,里面很多代码执行后都会出现“TypeError: Error #1009: 无法访问空对象引用的属性或方法。”这个错误。几经周折,才知道解决办法:使用addEventListener( Event.ADDED_TO_STAGE, enterDLHandle ),把要用的stage代码放到enterDLHandle里面,就没问题了。不知道有没有其他解决方法,知道的说声啊~

在经典论坛上提问这个问题,终于有人做出全面回答了,在此感谢zjs35

首先要明白stage是什么意思,stage是显示对象的一个引用舞台的属性,如果显示对象不在显示列表中,即没有用addChild()添加,stage等于null,你的问题就在这里。
使用stage有下面几种方法:
1、文档类的构造函数中可以直接使用stage属性
2、非文档类可以通过参数传递到类里面。
class Test extends Shape
{
function Test(stage:Stage)
{
}
}
3、不想传递参数时,要注意代码的顺序。
class Test extends Shape
{
function Test()
{
}
functon useStage()
{
trace(stage)
}
}
这样使用
var test=new Test()
test.useStage()//null,你的问题出在这里
addChild(test)//添加到显示列表后,就可以使用stage属性。
test.useStage()//[object Stage]
总之,理解stage是显示对象的属性,位于显示列表中的显示对象的stage才引用舞台


  1. package {
  2.         import flash.display.Sprite;
  3.         import flash.events.MouseEvent;
  4.         public class button extends Sprite {
  5.                 private var f:full_screen
  6.                 public function button() {
  7.                         var _sprite:Sprite=new Sprite  ;
  8.                         _sprite.graphics.beginFill(0xff0000);
  9.                         _sprite.graphics.drawRect(0,0,50,50);
  10.                         _sprite.graphics.endFill();
  11.                         addChild(_sprite);
  12.                         _sprite.addEventListener(MouseEvent.CLICK,_click);
  13.                         f=new full_screen(stage)  ;
  14.                 }
  15.                 private function _click(event:MouseEvent):void {
  16.                         f.go();
  17.                 }
  18.         }
  19. }
复制代码
  1. package {
  2.         import flash.display.Sprite;
  3.         public class full_screen extends Sprite {
  4.                 private var stage_obj:Object;
  5.                 public function full_screen(_obj:Object ) {
  6.                         stage_obj=_obj;
  7.                 }
  8.                 public function go():void {
  9.                         switch (stage_obj['displayState']) {
  10.                                 case "normal" :
  11.                                         stage_obj['displayState']="fullScreen";
  12.                                         break;
  13.                                 case "fullScreen" :
  14.                                         stage_obj['displayState']="normal";
  15.                                         break;
  16.                         }
  17.                 }
  18.         }
  19. }
复制代码

package {
import flash.display.Stage;
public class test {
       public function test() {
        
       }
       public function dis(t:Stage){
         trace("舞台宽度为:"+t.stageWidth)
       }
}
}

import test;
var t:Sprite=new Sprite()
addChild(t)
var te:test=new test()
te.dis(stage)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值