- 浏览: 699892 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
shappy1978:
自己踩死自己了,我还是有远见的嘛
该死的微软,该死的IE -
calosteward:
I know Zxing and shopsavvy, bot ...
[trans]COMPARISON OF MOBILE BARCODE SCANNERS -
qq690388648:
唉……四年前的Bug,现在还没改,Apache也有不足的地方啊 ...
POI解析Word表格备忘 -
shappy1978:
Now I get to say that every met ...
Jailbreak Detection on iOS -
hebeixiaolei:
你好,我想问一下,用poi如何往word文档里插入超链接呀!
POI读取Word文档总结
至此终于调用了doLayout强制重新“布局”,根据revalidateAsSoonAsPossible的备注,这个函数就是为了方便开发者“强制”刷新界面所提供的,Kuix本身不调用这个函数,而使用场合恰好就是我碰到的这个场景。解决方案如下:
Kuix.getCanvas().revalidateAsSoonAsPossible(); //恢复滚动条 ScrollPane main=(ScrollPane)screen.getWidget("main"); main.bestScrollToChild(screen.getWidget("selUserName"), false);
案例二:下拉框的bug
如果你使用了下拉框(choice),并且使用了Kuix的刷屏机制(如:transition: slide(left);),那么很容易发现下拉框的一个bug会导致系统当机,快速按确定键弹出下拉框并选择,那么用不了几下就会发现界面完全失去响应,死机了,而且下拉列表的项目“丢失”了若干项。造成上述bug的原因是缺少同步机制,输入按键的时候Kuix会把按键存入keyEvents,等待消息处理线程的处理,快速多次输入确认键导致上一次弹出/关闭列表窗口还没处理完毕,消息处理线程又再次操作列表,导致死机现象产生,最好的解决方法当然是在弹出列表时增加同步机制,但是我们不希望按键输入完毕后界面还在缓慢的多次弹出、关闭,简单说就是不需要缓存输入键,所以下面的解决方案可以快速解决上述bug:
protected void processKeyEvent(byte type, int keyCode) { if (initialized) { int kuixKeyCode = adoptKeyCode(keyCode); // Intercept debugInfos key if (type == KuixConstants.KEY_RELEASED_EVENT_TYPE) { if ((debugInfosKuixKeyCode & kuixKeyCode) == kuixKeyCode) { debugInfosKeyCounter++; if (debugInfosKeyCounter >= 3) { initializer.processDebugInfosKeyEvent(); debugInfosKeyCounter = 0; } } else { debugInfosKeyCounter = 0; } } // Add event to queue synchronized (this) { if(keyEvents.isEmpty()) //add by shappy keyEvents.addElement(new int[] { type, kuixKeyCode }); } } }
if(keyEvents.isEmpty())可以保证在有键盘事件未处理时,新的键盘输入被系统忽略。理论上这样的代码可能丢失输入
键,但是好在多数手机上没有键盘,而且Kuix也不支持直接输入文字,所以,就这样吧。
附,choice的按键处理函数,这里显然没有同步机制
/* (non-Javadoc) * @see org.kalmeo.kuix.widget.AbstractActionWidget#processActionEvent() */ public boolean processActionEvent() { Desktop desktop = Kuix.getCanvas().getDesktop(); if (desktop != null) { if (lastSelectedRadioButton != null) { lastSelectedRadioButton.catchChildrenFrom(choiceContainer); } // Retrieve the owner screen instance ownerScreen = desktop.getCurrentScreen(); // Keep the cleanUpWhenRemoved property value ownerScreenCleanUpWhenRemoved = ownerScreen.cleanUpWhenRemoved; ownerScreen.cleanUpWhenRemoved = false; desktop.setCurrentScreen(screen); } return super.processActionEvent(); }
有人说choice在tabgroup中才会出现上述问题,其实不是的,起码我在没有tabgroup的ui中确实出现过上述问题,而且
也不难测试,主要应该是transition的刷屏机制导致popup的窗口延迟才会出现问题,另外就是弹出窗口后返回原来的窗口是会出现choice的选择项丢失的情况,虽然代码里面强制给choice赋值可以保证下次提交是可以获取到choice的值(否则会是null),但是弹出时选择项还是空.
Kuix的代码框架总体不错,但是小问题相当多,毕竟他是开源的框剪,作者的更新也相当慢,对中文的支持还不是很好,做了这几个月时间,给初学者的建议是,如果你没有决心去修改或者了解其源代码的话,建议还是不用它吧.另外列出它的几个问题,不是全部,只是随手写出来的,是没有解决或者完善解决的问题.
1 choice的长度超过一页时会显示滚动条,但是弹出列表时不会自动定位到当前选择项
2 在有滚动条,而且界面长度超过一页时,读取或者操作界面的某个widget时(很多时候是读取/修改某个列表),界面会自动滚动到最后.
3 实机测试似乎界面上所有的字体都是一样的,而不是可以用j2me的三种大中小的字体,但是wtk的模拟器上则可以,怀疑是kuix对中文字体支持不是很好
4 界面停滞现象,用线程连接服务器读取数据时,返回处理结果后弹出或者修改界面时,会出现界面停滞的情况,按任一按键或者鼠标可以马上恢复,否则需要等几秒时间,这一情况在模拟器上很少出现,实机比较多,没碰到的人估计很难理解我说的额情况,测试判断应该是线程同步问题导致,查询过程越慢越明显(因为我用上https通道加密后,这个现象会更明显),暂时没有完善的解决方案.
5 Kuix不支持直接输入,必须弹出标准输入窗口,这个其实不影响软件的功能,但是有时候挺煞风景的,而且不是kuix才有,其实有些开源的组件部分解决这个问题,应该说它必须解决两个问题,一个是kuix的布局问题(kuix的界面是运行时排版的,这可以解决不同分辨率的自适应问题),还有一个问题是解决输入法,你不仅必须接收特殊字符,还要接收汉字,而且最好支持手写输入,这是个大问题
6 滚动条问题,kuix滚动条默认是纵向的,其实它也支持横向滚动条,但是只能选择其中一种,作者不同时支持两种方向的滚动条估计和布局的缺陷有关.
7 不支持本地script,kuix把view独立开确实是方便用户编写界面,但是缺少客户端的脚本判断,这限制了软件的灵活性,比如说我在登录前必须判断用户的账户和密码不为空并提示用户,就必须把代码写死在客户端,所以必须引入客户端的脚本机制,这样Kuix才不失为一个完善的瘦客户端开发组件,另外,结合客户端脚本功能时,最好提供封装好的服务器连接组件,方便客户端的调用.
问题很多,但其实只是其中很小一部分,希望没吓到希望学习Kuix的人,以后有时间解决其中部分问题的话我会陆续发表一些blog,不过项目差不多结束了,估计会转向其他的方向,有解决部分问题的朋友希望您回复一下,给其他读者作为参考.(我的邮箱shappy1978@sohu.com)
评论
我想用kuix框架,在kuix框架里对事件使用canvas进行了捕获处理,所以要实现定时执行的功能,需要对kuix的canvas进行修改,使用多线程+定时器,应该可以实现吧
发表评论
-
关于BlackBerry在线讲座的观感
2011-03-24 16:20 911整体印象:夸夸其谈,自我陶醉,缺乏特色,迟早步palm, ... -
【转】Zxing介绍
2011-02-28 11:13 2374源地址:http://blessdyb ... -
关于Android上的虚拟机(Kuix)
2011-01-17 12:00 1782个人对于Android的 ... -
Kuix贴士
2010-12-07 14:48 1314发现TextField有onchan ... -
Kuix组件Choice发现一个新的bug
2010-11-16 09:52 1061本来想偷懒,利用choice ... -
J2ME 3.0发布了,不过好冷
2010-10-22 17:41 1086http://java.sun.com/javame/down ... -
Kuix在魅族上的安装
2010-06-18 17:11 1037今天第一次在一台魅族上安装我的程序,结果不管是签名还是 ... -
关于J2ME的外部调用
2010-04-28 14:20 1581一开始学习J2ME的时候就问过一些“高手”们,如何调用 ... -
POI word目录处理备忘
2010-04-07 10:57 3387今天发现word文件的目录处理还不完善,原来只是想着完 ... -
5800入手小记
2010-03-26 16:18 1290我去年的这个时候很恶 ... -
J2ME签名备忘
2010-03-15 14:21 1449今天拿到VeriSign的签名,使用过程中碰到几个问题 ... -
J2ME签名备忘
2010-03-01 17:15 0Thawte代码签名证书操作指南 http://www.it ... -
Kuix TableLayout bug说明(2)
2010-01-28 11:24 1374今天又测试出TableLayout 的一个bug,如果表 ... -
Kuix TableLayout bug说明
2010-01-26 16:53 1868实际上用过TableLayout来作表格的人估计都碰到 ... -
Kuix ScrollPane修改备忘录
2010-01-20 09:00 1588本次修改目标:为ScrollPane增加横向和纵向两个滚 ... -
关于Kuix如何确定Widget的大小探讨
2010-01-14 16:20 1806由于Kuix作者设计理念的影响,所有的widge ... -
【转】Nokia MIDlet(MIDP 2.0)代码签名证书申请和使用指南
2010-01-07 16:33 1426http://embed.e800.com.cn/articl ... -
SMSLib在tomcat中报NoSuchPortException的问题
2010-01-06 18:32 3189在application的project运行正常,但是 ... -
SMS-Push激活J2ME程序 备忘录
2010-01-05 18:17 1930http://www.cnblogs.com/blues ... -
【转】将自定义 widget 嵌入 Kuix 界面
2009-12-31 08:37 1148http://blog.csdn.net/defonds/ar ...
相关推荐
".jad"文件通常是Java应用程序描述符,用于J2ME(Java 2 Micro Edition)平台,它包含了运行Java应用所需的元数据。".jar"文件则是Java档案文件,可以包含类、资源和配置文件,通常用于分发Java应用程序或库。 kuix...
总结来说,Kuix是一个针对J2ME平台的强大开源框架,它通过提供丰富的组件、事件处理机制、数据绑定等功能,降低了开发复杂度,提升了开发效率。配合详细的文档和示例,开发者可以更轻松地进入J2ME应用开发的世界。...
目前广泛应用的J2Me框架,Kuix是一个使用XML/CSS来开发的lib,它提供了大部分UI组件,比 如:button,textfields,lists,menus,tabs等)。它的主页是源代码放在google code上,http://code.google.com/kuix,如果要使用...
2. **高端应用开发**:KUIX包含了一系列组件,支持高级应用的开发,利用widget和继承概念,便于定制和使用。 3. **快速便捷的开发流程**:通过XML和CSS文件的结合,KUIX使得程序员能够更快速地构建应用程序。 4. *...
2. **COPYING**:通常包含了软件的许可证信息,说明了 Kuix 的使用、复制、修改和分发的规则,确保开发者在使用库时遵循开源协议。 3. **kuix-1.1.0.jar**:这是Kuix库的核心文件,包含了所有实现UI组件和功能的类和...
首先,kuix-1.1.0是一个针对Java开发的库,其源代码提供了深入理解库功能和内部机制的机会。源代码通常包含了类、接口、方法以及其他相关资源,对于开发者来说,是学习和调试的关键资料。通过查看源代码,我们可以...
Kuix( Kalmeo User Interface eXtensions) http://www.kalmeo.org/projects/kuix: Kuix是一个使用XML/CSS来开发的lib,它提供了大部分UI组件,比 如:button,textfields,lists,menus,tabs等)。它的主页是源代码放在...