Multithreading as3工作人员因未知原因出现1009类型错误
我正在编写一个AS3脚本,尝试在其中启动一个线程。当我尝试的时候,我总是得到下面的1009错误。我正在密切关注互联网上的一个howto页面。我正在使用(我想)flash的11.4版Multithreading as3工作人员因未知原因出现1009类型错误,multithreading,actionscript-3,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 { impor
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错误,可能是因为跟踪后的线路。我可以用什么来代替“事件。添加到”阶段,以使其能够运行
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();
}
}
}
不确定这是否会修复它,但是否尝试添加新关键字?var ai:SomeClass=新的SomeClass();啊,是的,那是个打字错误。我现在就解决这个问题。很可能this.loaderInfo为null,因此您无法访问bytes属性。在虚线之前跟踪它:
Trace(this.loaderInfo)代码>是的,trace(this.loaderInfo)只是说'null',我稍微编辑了我的原始问题。现在,当我在调试模式下运行程序时,它似乎可以工作,而如果我在正常模式下运行它,它就不能工作。我在this.loaderInfo
中添加了一个事件侦听器,它等待event.Complete
,但结果相同。调试器工作,而常规运行不工作。