一个由单例模式引发的问题
最近我用一个单例模式类LoginNetManager对socket进行了封装,里面有一个send方法,专门用户向服务器发送事件,写法如下:
1 2 | LoginNetManager.getInstance().addEventListener(NetEvent.SOCKET_ERROR,onConnectError); LoginNetManager.getInstance().send(NetEvent.LS_MSG_ADDCONNECT); |
这个就是向服务器发送其中一个事件信息的语句,但奇怪的问题出现了,我在flashIDE本地进行测试的时候,一切正常,但是当我放到虚拟路径下测试的时候,它就会提示说“无法找到空对象引用的属性或方法”,我一看,问题就出在第二行那个send的方法,难道说类还没有完全实例化的时候,程序就继续向下运行了?但是这里也不存在异步执行啊,无奈之下,我修改成一个延迟语句:
1 2 | LoginNetManager.getInstance().addEventListener(NetEvent.SOCKET_ERROR,onConnectError); setTimeout(getSocket,500); |
我在getSocket方法中调用那条语句,问题就都解决了。这确实很蹊跷,我承认flash在本地运行与在网页中运行的时候,执行的是不同的flash player程序,但是从这个例子来讲,不同flash player之间的差异性还是显而易见的。
为什么?能说说吗
这个应该是虚拟机底层的一些机制造成的。
很简单的问题,调试一下就出来了!!
你调用的是单例,Socket在哪里实例化,实例化是否成功。。然后你再能用send..
很正常,如果网络有问题,你延时也是没啥用的。。
这个实例化的过程是在内存中进行的,应该跟网络延迟没什么关系吧。这里的关键问题是:同样的代码,但是在不同的flash player下运行会导致不同的结果。