我正在研究一个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();
}
}
}