Actionscript 3 Null对象错误消息

时间:2010-08-08 02:56:26

标签: flex flash actionscript null

我正在构建一个仅支持AS3的项目,并且遇到了“无法访问空对象引用的属性或方法”的运行时错误。

这是我的代码:

main.as

       public class videoMain extends Sprite{

         private var videoPlayer:Player;

       public function videoMain (){
         loadPlayer()
         loadProgress();
       }

       private function loadProgress():void{

        //the code below gave me null object error.....     
        var byteLoaded:Number=videoPlayer.videoBytesLoaded; //the problem code
        var byteTotal:Number=videoPlayer.videoBytesTotal;  //the problem code

        var percent:Number=Math.floor(byteLoaded/byteTotal)*100;
        }

        private function loadPlayer():void{

        videoPlayer= new Player();
        videoPlayer.createPlayer();
    }

}

Player.as

public function createPlayer():void{

    _loader = new Loader();
    _loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
    _loader.load(new URLRequest(playerType));

    }

public function get videoBytesLoaded():Number{
    return _Player.getVideoBytesLoaded();  //youtube api method
    }

public function get videoBytesTotal():Number{
    return _Player.getVideoBytesTotal;    //youtube api method
    }

 private function onLoaderInit(event:Event):void {
    _Player=_loader.content;
        //only show part of codes....
    }

I appreciate any help....Thanks!!!!!

1 个答案:

答案 0 :(得分:1)

_Player仅在Event.INIT触发后定义,因此在定义_Player值之前的任何调用都将引发错误。

你应该至少拥有这个:

public function videoMain (){
     loadPlayer()
   }

private function onLoaderInit(event:Event):void {
    _Player=_loader.content;
    //only show part of codes....
    loadProgress();

}

但是进度事件不是静态的,所以你应该有一个enterFrame事件监听器来监听不断变化的值......

private function onLoaderInit(event:Event):void {
    _Player=_loader.content;
    //only show part of codes....

    addEventListener(Event.ENTER_FRAME , enterFrameListener);
}

private function enterFrameListener(event:Event):void
{
    loadProgress();
    // and here you add some way to remove this event listener when 
    // the video is fully loaded
}