J2ME FAQ

  1. 什么是J2ME?
    答:J2ME是Java 2 Micro Edition的简称,是SUN推出的针对嵌入式消费类电子产品的开发平台,例如手机、PDA和电视机顶盒等。事实上,J2ME是一整套技术和规范的集合。
  2. 开发J2ME应用程序使用什么开发环境?
    答:目前比较主流的开发环境有JBuilder、Eclipse和SUN Mobile等。本站推荐免费、开源功能强大的eclipse,读者可以参考如下文章搭建J2ME开发环境
  3. Configuration
    和Profile的区别和联系是什么?

    答:目前,根据目前市场上移动设备的硬件特性划分出两个主要的Configuration,一个是
    Connected Limited Device Configuration和Connected Device
    Configuration,在Configuration层定义了Java的核心类库和虚拟机。而Profile则是根据设备的功能特性提供的一系列的
    API,比如Mobile Infomation Device Profile(MIDP)。
  4. 什么是可选包?
    答:由于设备的功能差别很大,如果用一个Profile进行概括不切合实际,因此根据不同的功能特性制定了相应的Profile,我们把他们叫做Optional Profile,比如Bluetooth。
    可以参考介绍J2ME可选包的概念。
  5. J2ME中不支持浮点运算怎么办?
    答:由于硬件的原因,在CLDC1.0中没有提供浮点数的支持,但是在CLDC1.1中这个问题已经解决了,如果你基于CLDC1.0开发的话可以使用第三方的函数库比如mathfp。
  6. 哪里可以找到J2ME的参考API DOC?
    答:可以在WTK_HOME/docs/api下找到,其中WTK_HOME是你wtk的安装目录例如C:WTK21docsapi
  7. 如何在eclipse中使用nokia7210的模拟器和相关的API?
    答:请参考开发NokiaS40系列应用程序初级篇
  8. J2ME开发时,服务器端必须要在运营商注册吗?
    答:不需要
  9. 如何在J2ME开发中使用混淆器?
    答:推荐使用Proguards,请参考使用Proguard混淆J2ME应用程序
  10. 联网的程序编译通过,运行的时候提示block之类的错误
    答:联网应该在新线程中进行,检查一下自己的程序是否这么做的,关于联网可以参考本站专题
    J2ME联网开发专题
  11. 出现无法创建MIDlet的错误提示如何解决?
    答:通常这样的问题是由于jad文件错误引起的,检查jad文件的Midlet-n的属性之是否正确
  12. 如何把其他的图片格式转换为PNG格式的?
    答:可以用Photoshop
  13. 如何获得当前手机屏幕的大小?
    答:使用Canvas类的getWidth()和getHeight()方法
  14. 如何学好J2ME?
    答:推荐看看这篇文章如何学好J2ME
  15. 能否使用eclipseME+WTK2.1进行J2ME应用程序调试(debug)?
    答:可以,注意选择windows->preferences->java->debug 不要选择suspend execution的前面两个选项,在debuger timeout选项中 第一个时间至少设置为15000ms 这样就可以调试了
  16. 使用JBuilder和Eclipse开发J2ME应用程序,图片资源该如何处理并在程序中正常显示?
    答:请参考关于Jbuilder和Eclipse中使用图片的问题
  17. 开发好的应用程序安装到手机的时候,会出现版本不合适等问题导致安装失败。
    答:通常这样的问题是由于真机支持的CLDC/MIDP版本和应用程序版本不一致造成的,如果你确认你的应用程序可以在真机上运行,那么请修改你的jad文件。
  18. 如何在Eclipse中使用蓝牙包进行开发?
    答:SUN发布的WTK2.2是支持蓝牙功能的,因此你需要使用EclipseME把WTK22集成到Eclipse开发环境中,在新建项目的时候把jsr082.jar加入到项目中,jsr082.jar的位置在WTK22_HOME/lib/jsr082.jar
  19. 如何正确解决J2ME开发中的中文问题?
    答:请参考下面两篇文章,J2ME中文问题的解决方案 在J2ME中读取各种格式的文本文件
  20. 如何接受GET方式传输过来的中文数据?
    答:推荐使用servlet规范中新推出的Filter组件,在Request传给servlet之前使用Filter对request进行编码的改变。
  21. WAP开发和J2ME开发有什么异同?
    答:
    用J2ME开发手机应用程序进行联网的时候,这时候实际上是client-server构架的,由J2ME程序本身提供UI和联网等操作的,我们要写大量
    的代码。用wml或者jsp servlet asp
    php等开发wap应用程序的时候,是browser-server构架的。我们只需要提供server端的程序,这些程序通过手机中的wap
    browser来解释显示给用户,就像用IE访问一样。
  22. ASP、PHP等技术可以用来和MIDlet进行联网通信吗?
    答:可以
  23. Nokia S40提供的J2ME API以及Nokia UI API能够播放mid吗?
    答:不可以
  24. 如何通过J2ME获得手机的号码?
    答:
    在J2ME提供的API中是不能实现这样的功能的,很多厂商可能会有自己的API来实现这样的功能,请参考他们的开发文档,另外,如果是c/s程序,在服
    务器端可以通过移动网关取得大多数的手机号码.phoneNumber=
    request.getHeader("x-up-calling-line-id");
    其中request是HttpServletRequest的对象
  25. MIDP2.0中提供的PUSH技术要在什么环境下才能正常工作?
    答:你必须把使用了PUSH的MIDlet Suite通过OTA的方式安装到手机模拟器上才可以,可以通过RUN via OTA(ktoolbar)
  26. MIDP1.0中支持声音吗?
    答:MIDP1.0中不支持,在MIDP2.0中包括了MMAPI的一个子集用来处理音频方面的需求
  27. 如何用J2ME访问手机文件系统上的文件?
    答:一般是不可以的,如果你的手机支持JSR75的话,那么你可以使用FileConnection来进行操作。
  28. 如何对图片进行缩放?
    答:在MIDP2.0中可以实现,请参考基于MIDP2.0实现图片的缩放功能 通过插值法借助Nokia UI API也可以实现,请参考J2ME插值算法实现图片的放大缩小
  29. 怎样用eclipse打开一个用eclipse建的项目?
    答:File ——import ——existing project into workplace
  30. 如何在J2ME中解析XML?
    答:可以采用第三方的程序kxml,如果手机支持jsr172的话那么可以使用j2me的标准库来完成。
  31. J2ME应用程序中可以运行几个线程?
    答:这是和设备相关的,通常在3-5个,需要你去查看设备的开发文档。

1)如何读取手机中的电话本?

答:MIDP中并没有提供相关的API可以访问电话本,如果你的手机支持JSR75的话,那么可以使用PIM来访问手机中的通讯录。Nokia有如下手机支持PIM:6630,6680,9300,9500,8800,6101,5140i,6230i,N70,N91,N90

2)基于windows实现的WTK是把RMS的数据存储在哪里的?
答:WTK22appdbDefaultColorPhone

3)如何基于MIDP1.0把大图切割为小图片?
答:建议使用clip的概念来解决这个问题,代码片断如下:

void drawClipImage(Graphics g, Image image, int x, int y, int clipX,
                      int clipY, int clipWidth, int clipHeight) {
    int _clipX, _clipY, _clipWidth, _clipHeight;
    _clipX = g.getClipX();
    _clipY = g.getClipY();
    _clipWidth = g.getClipWidth();
    _clipHeight = g.getClipHeight();
    g.setClip(x, y, clipWidth, clipHeight);
    g.drawImage(image, x - clipX, y - clipY, 20);
    g.setClip(_clipX, _clipY, _clipWidth, _clipHeight);
}

4)如何在J2ME中得到程序运行所用时间?
答:使用System.currentTimeMillis(),在开始执行程序的时候得到start,在程序执行结束的时候得到end,end – start就是程序运行的时间。

5)使用eclipseME+eclipse如何转换JAD文件能包含中文?
答:右键点击JAD文件,选中properties,把里面的text file encoding换成UTF-8就可以了

6)怎么判断手机支持的MIDP 1.0 2.0?
答:可以使用方法System.getProperty()取得手机的一些属性值。关于手机的属性值请参考介绍MIDP应用程序的属性

7)安装Jar文件的时候出现“无效的manifest”错误
答:manifest文件出错需要检查jar包中的manifest.mf文件,看看是不是符合要求。特别注意MIDlet-Version字段应该形式如x.x.x,不能别这个形式长。

8)如何使TextField不可编辑?
答:参考MIDP java doc将TextField的限制设置为TextField.UNEDITABLE。

9)如何使用J2ME开发手机照相的软件?
答:请参考MMAPI(JSR135)http://java.sun.com/products/mmapi/index.jsp

10)如何取得手机的IMEI号?
答:并不一定底层的实现都这次这个功能,需要开发者去参考相关机型的文档。这里只列出两个

MOTO:
String imei = System.getProperty("IMEI");

SIEMENS:
String imei = System.getProperty("com.siemens.IMEI");

11)哪里可以找到J2ME的java doc?
答:WTK_HOME/docs/api

12)ItemCommandListener的作用是什么?

答:ItemCommandListener同样是一个监听器,当某个Item上出发Command事件的时候,

ItemCommandListener中定义的commandAction(Command cmd,Item item)方法

会被调用。用法和CommandListener类似。

13)手机如何访问大型关系型数据库例如SQL Server?

答:只能通过联网的方式,借助于代理类来做这些事情了。目前手机不支持JDBC的。

14)使用WTK命令行方式开发MIDP应用程序经常出现错误,怎么解决?

答:推荐使用IDE,比如Netbeans 4.1等。

15)可以使用J2ME开发手机短信程序吗?

答:如果手机实现了对WMA(JSR 120)的支持,那么可以使用WMA来开发这样的短信程序。最好结合push注册技术。