更新:不知怎的,这在浏览器中运行 flash 时有效,但如果从 IDE 运行则不起作用。如果您遇到同样的问题,您可能想尝试在浏览器中运行。
我正在制作一个聊天应用程序,它使用 Flash 和 Actionscript 3.0 从我的服务器重复读取文本文件。我用 URLLoader 打开文件,一开始工作正常。然而,在大约 10 次调用之后,URLLoader 就卡住了。
它不提供完成事件,不提供安全错误,不提供状态事件,也不引发异常。它根本不会触发任何事件。我什至在 URL 中添加了一个随机值,以确保这不是缓存问题。当然,我可以检测到它何时被卡住,但似乎没有任何方法可以解除它。即使我在 URLLoader 上调用 close() 然后将其设置为 null 并创建另一个,它也不会恢复轮询。
下面是轮询服务器并每两秒调用一次的函数。
private function check_server() {
var url:String = "http://coworkthailand.com/say/snd/index.php?"+Math.random();
if (loader != null) {
trace("was already checking "+loader.bytesLoaded+" / "+loader.bytesTotal);
return;
}
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.addEventListener(flash.events.IOErrorEvent.IO_ERROR,
function(e:Event) { loader = null; trace("fail"); })
loader.addEventListener(flash.events.SecurityErrorEvent.SECURITY_ERROR,
function(e:Event) { loader = null; trace("security error"); })
loader.addEventListener(flash.events.HTTPStatusEvent.HTTP_STATUS,
function(e:flash.events.HTTPStatusEvent) { trace("status "+e.status); });
try {
loader.load(new URLRequest(url));
} catch (error:Error) {
trace("Unable to load requested document.");
}
}
这不是一个重要的项目,但任何想法将不胜感激!
对于这种情况,最佳实践要求使用 URLLoader 的单个实例;您很可能在某个地方被竞争呼叫阻塞。同样,您可以尝试使用一个简单的标志来检测加载程序是否正忙于现有的调用,然后再进行另一个调用;这是一个使用单个加载器每五秒发出请求的工作示例,显示单个加载器和“isOpen”检查:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="app_init()">
<mx:Script>
<![CDATA[
private var timer:Timer;
private var loader:URLLoader;
private var isOpen:Boolean;
private function app_init():void
{
timer = new Timer(5000)
timer.addEventListener(TimerEvent.TIMER, timer_tick, false, 0, true)
loader = new URLLoader();
loader.addEventListener(Event.OPEN, loader_open);
loader.addEventListener(Event.COMPLETE, loader_complete);
// Start the timer
timer.start();
}
private function timer_tick(event:TimerEvent):void
{
// Check if the loader's busy before calling load, and/or close()
if (!isOpen)
{
// loader.close();
loader.load(new URLRequest("http://mydomain.com/myfile.txt"));
}
}
private function loader_open(event:Event):void
{
// Mark as open
isOpen = true;
}
private function loader_complete(event:Event):void
{
// Do work
// Mark as closed
isOpen = false;
}
]]>
</mx:Script>
</mx:Application>
希望能帮助到你!祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)