做FLEX微博碰到的各种问题以及解决办法
最近参加一次某某比赛,做了一个FLEX微博,用JAVA做后台语言,功能非常简单,但是碰到的问题不少。现在讲讲我碰到了些什么问题和解决的办法吧。
1.FLEX工程与JAVA合并
首先当然是配置了,本来一直想把FLEX工程与JAVA工程合并在一起来,在网上找了好多方法都不行,最后干脆把JAVA工程放到一边去了,然后把编译好的CLASS复制过来,在这里发现JAVA工程里的代码不能放在包里,如果放在包里的话,就像remoting-config.xml配置正确也连接不了。所以这里得注意,JAVA类不能放在包里,尽管分类会好些。
2.BlazeDs连接不上
然后就是BlazeDs连接不上的问题了,不刻会报个什么问题,解决的办法是打开FLEX工程里的WEB-INF/web.xml,要删除一行东西吧,也不记得删除哪行了,写成这样就没错了,见附件。
3.JAVA运行的路径在Tomcat文件夹目录中
想用JAVA把Flex中的bytearray读取成图片存在服务端,我以为JAVA运行时的路径与FLEX在同一目录,后来用getAbsolutePath()检查一下才发现它在运行时的路径在Tomcat文件夹中,所以保存图片要用到webapps/BlazeDs/XX-debug/pictures才行
4.中文名图片无法读取出来
打开Tomcat/conf/server.xml,找到下面,把URIEncoding="UTF-8"添加上去
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
然后在使用的时候用:image.source=encodeURI(url);这样就行了,记得要重启Tomcat
5.GIF图片如何在FLEX中播放
在FLEX中不比在HTML中,播放GIF图片一般来讲用的是GIFPlayer这个包,在谷歌可以找到。
刚去谷歌找了一下,大概就是这个吧 http://code.google.com/p/as3gif/downloads/detail?name=GIFPlayer%200.6.zip&can=2&q=
myGIFPlayer=new org.bytearray.gif.player.GIFPlayer(true);var request:URLRequest = new URLRequest(encodeURI(pic)); myGIFPlayer.load(request); image.addChild(myGIFPlayer);//image为IMAGE控件myGIFPlayer.visible = true; //这一行不知道要不要,反正我也是找来直接用的
6.如何获取GIF图片的长与宽
我们知道普通的静态图片可以在加载完毕后直接用contendWidth来获取它的真实宽度,GIF没有官方的属性,只能
用到上面的包里定义的属性了。
myGIFPlayer.getFrame(1).bitmapData.height//这样就可以获取它的高度了,这里的getFrame(1)指它的第一帧//通常来讲GIF在播放的过程中大小是不变的,它的第一帧宽度就是它的宽度
7.spark主题没有滚动条 以及速度滚动速度太慢
spark没有滚动条,这个东西我在百度找了好久,谷歌也找了,最终是在flex开发文档找到的,那就是得自己定义一个皮肤才能
有滚动条,等滚动条出现后我发现这速度又太慢了,实在找不到办法,我就在皮肤上添加了一个鼠标滚动事件,然后速度就快起来了。
皮肤mySkin.mxml
<?xml version="1.0" encoding="utf-8"?><s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"><s:layout><s:BasicLayout/></s:layout><s:states><s:State name="normal" /><s:State name="disabled" /></s:states><fx:Declarations><!-- 将非可视元素(例如服务、值对象)放在此处 --></fx:Declarations><fx:Metadata></fx:Metadata> <fx:Script><!]></fx:Script><s:Rect id="backgroundRect" left="0" right="0" top="0" bottom="0"><s:fill><s:SolidColor color="0xccffcc" /></s:fill></s:Rect><s:Scroller height="100%" width="100%" ><s:Group id="contentGroup" left="0" right="0" top="0" bottom="0" mouseWheel="mousewheel(event)"></s:Group> </s:Scroller></s:Skin>
然后在你要用到皮肤的地方<s:Application.... skinClass="mySkin" .... />你就会看到 滚动条了
8组件中如何访问存放它的Application中的变量
虽然这个问题看起来简单,但是因为我是自学的,所以竟然没有发现有parentApplication这一属性,在组件中用
this.parentApplication.aaa 就可以访问存放该组件的父类窗口中的aaa变量了(也可以是其它控件)。
9新生成一个组件的对象,不能对它里边的控件直接赋值.
比如说你有一个aa的组件,里边有一个textInput名为txt,你不能这样写:
var t:aa=new aa();t.txt.text='什么什么东西',xx.addElement(t);
这样会生成的组件你会看不到里边的元素的,应该把值传给aa组件里的变量,然后在aa的creationComplete事件中把值再传给相应组件。
有时候碰到一些问题,刷新下TOMCAT,重启下编译器,换个浏览器可以就好了,但还有一些灵异事件至今都解释不清楚,下回再来说说,今天先去午休了。
页:
[1]