Flex(try-catch-finally)机制
2011-05-04 23:03
330 查看
http://www.adobe.us/livedocs/flex/3_cn/langref/statements.html <Flex try catch API>最近在使用中发现了flex异常捕捉的一个很奇特的地方,进行了多次试验,在此做个小小的总结:
测试代码如下:
Mxml代码
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init():void{
var a:String = null;
try{
var myurl:URLLoader = new URLLoader();
myurl.load(new URLRequest("aaa.xml"));
}catch(e:Error){
Alert.show("进入捕捉1");
}
}
]]>
</mx:Script>
</mx:Application>
这里的xml文件"aaa.xml"是不存在的,如果按照java异常捕捉的习惯这里应该是会被捕捉的。可是在flex是用情况中,结果却是依然弹出错误提示“Error #2044: 未处理的 ioError:。 text=Error #2032: 流错误”。
经在网上求证,可信的说法为flex的异常不是都能用try...catch捕捉的,像上面的情况必须使用监听器来使用,确实让人郁闷。
下面就来加个监听器捕捉下这个异常,测试代码如下:
Mxml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init():void{
var a:String = null;
try{
var myurl:URLLoader = new URLLoader();
myurl.load(new URLRequest("aaa.xml"));
myurl.addEventListener(IOErrorEvent.IO_ERROR,onErr);
}catch(e:Error){
Alert.show("进入捕捉1");
}
}
private function onErr(event:IOErrorEvent){
Alert.show("进入监听异常捕捉!");
}
]]>
</mx:Script>
</mx:Application>
运行这个测试代码,果真可以捕捉。看来flex的异常需要在逻辑上分成两种分别对待捕捉・・呵呵。
注:在测试的过程中我还发现了一个很特别的现象,现将测试结果记录在此:
在只是用try...catch捕捉上面的那种异常情况下。
测试环境为:window xp,flash 9,Adobe Flex Builder 3(以下简称fb3),tomcat5.5
1.在fb3中直接运行bin-debug目录下的swf文件,异常是捕捉不到的。
2.bin-debug目录下的swf文件不在非fb3中直接点击运行异常是可以捕捉到的。
3.在fb3中直接运行bin-release目录下生成的swf,异常是可以捕捉的。
4.bin-release目录下生成的swf在非fb3中直接点击运行异常是可以捕捉到的。
5.两个目录下的swf文件放在web服务器下通过ie访问,异常都不可以捕捉的。
6.两个目录下的swf文件放在web服务器下通过firefox访问,异常是可以捕捉的。
看来flex对运行平台的依赖还会很强的,还是用标准的监听去捕捉异常吧
测试代码如下:
Mxml代码
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init():void{
var a:String = null;
try{
var myurl:URLLoader = new URLLoader();
myurl.load(new URLRequest("aaa.xml"));
}catch(e:Error){
Alert.show("进入捕捉1");
}
}
]]>
</mx:Script>
</mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.controls.Alert; private function init():void{ var a:String = null; try{ var myurl:URLLoader = new URLLoader(); myurl.load(new URLRequest("aaa.xml")); }catch(e:Error){ Alert.show("进入捕捉1"); } } ]]> </mx:Script> </mx:Application>
这里的xml文件"aaa.xml"是不存在的,如果按照java异常捕捉的习惯这里应该是会被捕捉的。可是在flex是用情况中,结果却是依然弹出错误提示“Error #2044: 未处理的 ioError:。 text=Error #2032: 流错误”。
经在网上求证,可信的说法为flex的异常不是都能用try...catch捕捉的,像上面的情况必须使用监听器来使用,确实让人郁闷。
下面就来加个监听器捕捉下这个异常,测试代码如下:
Mxml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init():void{
var a:String = null;
try{
var myurl:URLLoader = new URLLoader();
myurl.load(new URLRequest("aaa.xml"));
myurl.addEventListener(IOErrorEvent.IO_ERROR,onErr);
}catch(e:Error){
Alert.show("进入捕捉1");
}
}
private function onErr(event:IOErrorEvent){
Alert.show("进入监听异常捕捉!");
}
]]>
</mx:Script>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.controls.Alert; private function init():void{ var a:String = null; try{ var myurl:URLLoader = new URLLoader(); myurl.load(new URLRequest("aaa.xml")); myurl.addEventListener(IOErrorEvent.IO_ERROR,onErr); }catch(e:Error){ Alert.show("进入捕捉1"); } } private function onErr(event:IOErrorEvent){ Alert.show("进入监听异常捕捉!"); } ]]> </mx:Script> </mx:Application>
运行这个测试代码,果真可以捕捉。看来flex的异常需要在逻辑上分成两种分别对待捕捉・・呵呵。
注:在测试的过程中我还发现了一个很特别的现象,现将测试结果记录在此:
在只是用try...catch捕捉上面的那种异常情况下。
测试环境为:window xp,flash 9,Adobe Flex Builder 3(以下简称fb3),tomcat5.5
1.在fb3中直接运行bin-debug目录下的swf文件,异常是捕捉不到的。
2.bin-debug目录下的swf文件不在非fb3中直接点击运行异常是可以捕捉到的。
3.在fb3中直接运行bin-release目录下生成的swf,异常是可以捕捉的。
4.bin-release目录下生成的swf在非fb3中直接点击运行异常是可以捕捉到的。
5.两个目录下的swf文件放在web服务器下通过ie访问,异常都不可以捕捉的。
6.两个目录下的swf文件放在web服务器下通过firefox访问,异常是可以捕捉的。
看来flex对运行平台的依赖还会很强的,还是用标准的监听去捕捉异常吧
相关文章推荐
- Flex(try-catch-finally)机制
- Flex(try-catch-finally)机制(转)
- 异常概念和处理机制,try-catch-finally,throw和throws,自定义异常
- 异常概念和处理机制,try-catch-finally,throw和throws,自定义异常
- Java异常机制try、catch、finally、throw、throws五个关键字。
- JAVA异常处理机制的个人理解(try catch throw finally)
- C# 中异常抛出捕获机制--throw / try,catch,finally
- 异常机制第三十六课,try,_catch,finally,_return执行顺序
- java的异常处理机制(try…catch…finally)
- C#中的异常捕获机制(try catch finally)
- java中的try...catch...finally的运行机制你知道吗?
- Java异常处理机制以及try-catch-finally-return执行顺序
- C#中的异常捕获机制(try catch finally)
- 74_异常机制_try_catch_finally_return执行顺序
- java异常处理机制(try-catch-finally)
- java的异常机制五个关键字:throw try catch finally throw
- C#中的异常捕获机制(try catch finally)
- 异常机制 :try、catch、 finally 、throw 、throws
- java的异常处理机制(try…catch…finally)
- JAVA学习笔记25——异常机制1:Exception简介+异常处理的try_catch_finally方法