解析J2ME对话框选择功能的实现
创始人
2024-07-15 16:51:42
0

本文向大家简单介绍一下J2ME如何实现对话框选择功能,你可以运用诸如win32API中dialog函数那样的方式来实现对话框并阻塞等待返回值,然后根据返回值执行不同的处理,相信本文介绍一定会让你有所收获。

J2ME实现对话框选择功能

在手机这么小的屏幕上开发使用,难点之一就是频繁的屏幕切换。尽管midp2.0的UI部分已经很丰富了,但这些UI部件都是基于事件回调的。这在处理大量的、基本的问答式交互时显得力不从心。

本文实现了一个阻塞当前线程的对话框,简要地说,你可以运用诸如win32API中dialog函数那样的方式来实现对话框并阻塞等待返回值,然后根据返回值执行不同的处理。

疑问何在?

首先回顾一下midpUI的事件处理机制。有两个要素:

1)首先UI部分由系统的一个线程负责维护。也就是说不能阻塞系统的事件处理要领。

2)事件处理运用的是一种回调机制。首先UI部件运用诸如setCommandListener之类的要领为自己注册一个回调接口(其中的回调要领由用户实现);等到触发了相应事件就调用这个注册好的接口的回调要领。

以下是一个实现了CommandListener的类的代码片断: 

  1. Formf=newForm("Helloworld");  
  2. f.addCommand(exit);  
  3. f.setCommandListener(this); 

可以想象基于事件回调的处理方式,在处理大量的、基本的问答式交互时显得力不从心。你不得不为每一个仅仅是询问要不要继续的对话框而实现一个又一个类,或者处理一个复杂的回调函数。如果选择后者,那么在一个又一个的if-else中处理不同逻辑事件的代码片断一定会烦死你。

较好的做法

这时候我们不免怀念一下win32Api中对话框函数的处理方式: 

  1. intchoose=Dialog(title,type……);  
  2. if(choose==OK){……}  
  3. elseif(choose==Cancel){……} 

这样处理将会阻塞当前线程,等待返回值,然后根据返回值执行处理。这样做很cool的原由就是在一个逻辑性很完整的任务中,你可以一次性在一个回调要领中完成所有逻辑,而不必为了问询基本的YES/NO疑问而在不同的类中间跳来跳去。

如何在MIDP下实现

我们遇到的***个疑问来自于我们的要领必须要阻塞当前线程等待返回值。也就是说,这个对话框不能在UI的回调中直接运行,比如commandAction中。处理办法是将所有的事件处理都放到一个线程类中处理。(这是一点额外的负担,但不可防止)。还好这个工作量不大,要想实现两个对象之间的通信也不难。

第二个疑问是如何阻塞当前的线程,我们祭出Java线程的三板斧之wait()/notifyAll()。我们可以指定一个信号量(初值false),当其为false时阻塞当前线程,在得到用户通知后将信号量改为true,并唤醒线程。

【编辑推荐】

  1. Javascript解决浏览器兼容问题12个技巧
  2. 基于J2ME图形技术特效
  3. J2ME手机游戏引擎程序架构
  4. 技术分享 如何识别控制DHTML和JS中的页面元素
  5. 深入学习JavaScript中Function对象语法 


 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...