as3 worker,1009 TypeError,原因不明

时间:2014-05-08 17:23:47

标签: multithreading actionscript-3

我正在研究一个AS3脚本,我尝试启动一个线程。我尝试时不断收到1009错误。我非常密切地关注互联网上的howto页面。我正在使用(我认为)flash 11.4版本。

TypeError: Error #1009: Cannot access a property or method of a null
object reference.

这是指为swfBytes分配this.loaderInfo.bytes的行。

package somepackage {

    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.events.Event;
    import flash.utils.ByteArray;

    public class SomeClass  extends Sprite{

        public var mainToWorker:MessageChannel;
        public var workerToMain:MessageChannel;
        public var worker:Worker;



        public function SomeClass() {
            // constructor code

            if (Worker.current.isPrimordial) {
                var swfBytes:ByteArray = this.loaderInfo.bytes;// HERE

                worker = WorkerDomain.current.createWorker( swfBytes );
                mainToWorker = Worker.current.createMessageChannel(worker);
                workerToMain = worker.createMessageChannel(Worker.current);

                worker.setSharedProperty("mainToWorker", mainToWorker);
                worker.setSharedProperty("workerToMain", workerToMain);

                //workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain);

                //worker.start();
            }
            else {
                mainToWorker = Worker.current.getSharedProperty("mainToWorker");
                workerToMain = Worker.current.getSharedProperty("workerToMain");

                //mainToWorker.addEventListener("mainToWorker", onMainToWorker);
            }


        }

    }


}

如果有人以前见过这个或知道我做错了什么,我会非常感激。

我将这个实例化为更大的一组类的一部分。我认为这可能是我的问题,所以我在根场景的'actions'脚本页面上自己实例化了这个类。我正在使用Flash CS6。我所指的“行动”页面上并没有多少。

var ai:SomeClass = new SomeClass();
addChild(ai);

编辑1: 这里我包含了一个'addEventListener'行。此代码似乎在调试模式下工作,但如果我只是定期播放电影则不行。如果我经常播放,我会再次收到1009错误,大概是跟踪后的线路。我可以用什么来代替'Event.ADDED_TO_STAGE'来运行它?

package somepackage {

    public class SomeClass extends Sprite{

        public var mainToWorker:MessageChannel;
        public var workerToMain:MessageChannel;
        public var worker:Worker;

        public function SomeClass() {

            if (Worker.current.isPrimordial) {

                this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            }

        }

        public function onAddedToStage(e:Event):void {

            this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            trace(this.loaderInfo);

            var swfBytes:ByteArray = this.loaderInfo.bytes;

            worker = WorkerDomain.current.createWorker( swfBytes );

            mainToWorker = Worker.current.createMessageChannel(worker);
            workerToMain = worker.createMessageChannel(Worker.current);

            worker.setSharedProperty("mainToWorker", mainToWorker);
            worker.setSharedProperty("workerToMain", workerToMain);

            workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain);

            worker.start();
        }


    }


}

0 个答案:

没有答案
相关问题