一个AsWing程序,单独运行正常,但是如果用另一个swf去载入这个程序,就可能出错,如下代码:
package
{
import flash.display.Sprite;
import org.aswing.AsWingManager;
import org.aswing.JFrame;
public class Sub extends Sprite
{
public function Sub()
{
createFrame();
}
private function createFrame():void
{
AsWingManager.setRoot(this);
var frame:JFrame = new JFrame(this, "frame");
frame.setSizeWH(200, 200);
frame.show();
}
}
}这段程序单独运行没有问题,但是如果我们写一个loader
package
{
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
public class Parent extends Sprite
{
public function Parent()
{
var loader:Loader = new Loader();
loader.load(new URLRequest("Sub.swf"));
addChild(loader);
}
}
}我们用Parent去载入Sub.swf,当运行Parent.swf的时候就会出错:

我认为原因在于AsWing在初始化的时候要调用
AsWingManager.getStage(),如果AsWingManager中的stage属性找不到,那就会抛出上面的错误,可是明明已经调用了AsWingManager.setRoot(this);(这个方法调用后AsWingManager.stage会引用传给setRoot方法的DisplayObjectContainer的stage)了啊。
由于Sub.swf是通过Parent.swf加载的,所以在Sub的init事件还没触发的时候,也就是被加载的swf还未完全初始化的时候,是得不到stage属性的。可以尝试在Sub的构造函数中trace(this.stage);然后用debug模式运行Parent,输出的是null。
这样出错的原因找到了,就可以去解决了,方法就是把AsWingManager.setRoot和创建AsWing程序的代码放在init事件触发之后。
修改Sub.as的代码:
public function Sub()
{
this.loaderInfo.addEventListener(Event.INIT, onInit);
}
private function onInit(e:Event):void
{
createFrame();
}这样就行了 :)
评论
想向你学习,能否给个QQ号?或开个群,大家一起讨论????
阿雕 发布
想向你学习,能否给个QQ号?或开个群,大家一起讨论????