在使用LocalConnection的时候,出现Error #2044: 未处理的 StatusEvent:。 level=error, code=这样的报错
以前是直接写在时间轴里的,没有报错。
这次是写在文档类。可是怎么搞都报错
例如.test1.swf加载了test2.swf,需要将test1的参数传到test2
1.加载test2.swf,然后在test2.swf建立一个连接,通知test1.swf已经建立完成(回调test1的t1Function()函数)
2.test1.swf收到test2.swf的回调之后也建立一个连接,并把参数发给test2.swf(回调test2r的t2Function(obj:Object)函数)
为了不重复写两次连接,所以写在一个as文件里
ConnectionObject.as
package com.zkl.net
{
import flash.events.StatusEvent;
import flash.net.LocalConnection;
/**
* 建立一个连接名,然后发送一个连接信息
* @author zkl
* 2010-8-3 10:57
*/
public class ConnectionObject
{
//回调对像
private var _client:Object;
//实例化连接
private var _conn:LocalConnection;
//准备一个 LocalConnection 对象,以接收来自 send() 命令(称为发送方 LocalConnection 对象)的命令。
private var _connName:String;
//接收的对像
private var _connObj:String;
//接收的句柄
private var _connHandler:String;
//接收的参数
private var _connVar:Object;
/**
* 使用当前的连接对像,建立一个连接名,然后发送一个连接信息
* @param _client:当前服务对像
* @param _connName:连接名
* @param _connObj:要连接的对像
* @param _connHandler:连接的句柄
* @param _connVar:附带的参数
*/
public function ConnectionObject(_client:Object, _connName:String, _connObj:String, _connHandler:String, _connVar:Object = null):void
{
this._client = _client;
this._connName = _connName;
this._connObj = _connObj;
this._connHandler = _connHandler;
this._connVar = _connVar;
init();
}
/**
* 建立连接
*/
private function init():void
{
_conn = new LocalConnection;
_conn.client = _client;
_conn.allowDomain("*");
try {
_conn.connect(_connName);
}catch (err:ArgumentError) {
trace(err);
}
}
/**
* 开始连接
*/
public function isConnection():void
{
if (_connVar == null) {
_conn.send(_connObj, _connHandler);
}else {
_conn.send(_connObj, _connHandler, _connVar);
}
_conn.addEventListener(StatusEvent.STATUS, onStatus);
}
/**
* 关闭连接
*/
public function connClose():void
{
_conn.close();
_conn = null;
}
/**
* 连接状态
* @param e
*/
public function onStatus(e:StatusEvent):void {
//_conn.removeEventListener(StatusEvent.STATUS, onStatus);
switch(e.level) {
case "status":
trace(_client + "发送成功.");
break;
case "error":
trace(_client + "发送失败!");
break;
}
}
}
}
这是test1.swf的文档类
package
{
import com.zkl.net.ConnectionObject;
import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
/**
* ...
* @author zkl
*/
public class Test1 extends MovieClip
{
private var co:ConnectionObject;
public function Test1() {
var loader:Loader = new Loader();
var movieUrl:URLRequest = new URLRequest("test2.swf");
loader.load(movieUrl);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
connObject();//------------------------------1
}
public function loadComplete(e:Event):void {
addChild(e.target.content);
//connObject();//-----------------------2
}
public function connObject():void {
co = new ConnectionObject(this, "t2", "t1", "t2Function", { totalUnit:10 } );
}
public function t1Function():void {
co.isConnection();
co.connClose();
}
}
}
//注意1和2不能调换,如果调换了就会出现前面那的错,主要是因为test2.swf还没加载完成之前,test1.swf要先做连接准备,不然test2.swf就会回调不到test1.swf的函数
这是test2.swf的文档类
package
{
import com.zkl.net.ConnectionObject;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLRequest;
/**
* ...
* @author zkl
*/
public class Test2 extends MovieClip
{
private var co:ConnectionObject;
public function Test2() {
co = new ConnectionObject(this, "t1", "t2", "t1Function");
co.isConnection();
}
public function t2Function(obj:Object):void {
co.connClose();
trace(obj.totalUnit);
}
}
}
请注意上红色的那段