J2ME学习笔记

 

一、J2ME介绍:

    J2ME的全称是Java2 Platform Micro Edition,其技术架构如下

          Optional Package

              Profile

          Configuration

   

    Optional Package是厂商选择性实现的,Profile是针对特殊硬件规定制定的高级API,Configuration则是起定义硬件功能与低级API的

作用。

1.Configuration最下层的开始说起,它是J2ME规定嵌入式设备能够执行Java程序的规范,J2ME把运算功能有限,电力有限这类的嵌入式设备叫做Connected Limited Device,规定这些设备如果能执行JAVA程序,则必须遵守哪些规范,而这些规范就定义在Connected

Limited Device Configuration里面,简称CLDC,类似有个可连接,资源相对来说无限的设备则被称为Connected Device,同样有个CDC规范。

我们平时所使用的手机属于Connected Limited Device范畴,支持J2ME的手机必须支持支持CLDC规范。就目前来看 CLDC有1.0和1.1两种,

两者最大的不同则是后者支持浮点运算,而前者不支持,CDC1.0和CDC1.1的核心类库(java.lang.*,java.io.*,java.util.*)和J2SE几乎

没什么区别,CLDC1.0则差别较大,CLDC1.1相对来说增强了CLDC1.0的功能,最小内存数量也从160K提升到 192K。CLDC加入的支持扩展类库

为有javax.microedition.io.*等。

    总结:

1.       CLDC与CDC 是J2ME规定嵌入式设备能够执行Java程序的两种规范.

2.       CLDC(Connected Limited Device Configuration) 是运算功能有限,电力有限的嵌入式设备.

3.       CDC(Connected Device Configuration) 是可连接,资源相对来说无限的设备

 

2.Profile,既然Profile构建在Configuration之上,其所规范的配备需求自然不会比Configuration低,而我们通常所提到的Profile有Mobile Information Device Profile(简称MIDP),针对的是手机和寻呼机,等移动设备。还有一种常见的Profile,Information Module Profile,是针对没有屏幕的移动设备所设计的。

      目前MIDP,最高的规格是2.0,硬件要求为:

      内存:256Kb非易失性内存可供MIDP组件使用,8Kb非易失性内存可工应用程序创建持久化数据,128Kb易失性内存可供虚拟机运行

时环境使用。

      显示:屏幕大小96*54,显示深度:1位,象素形状(长宽比):1:1。

      输入:单手键盘或者双手键盘或者触摸屏。

      网络:双向,无线,可以是间歇的,带宽有限的。

      声音:播放不同声调的能力,可以通过专用硬件也可以通过软件算法获得。

   

     J2ME规范中还定义了厂商可以选择实现的包,那就是Optional Packages,通常不同的厂商不同的产品会有一些不同的功能,那么制造

厂商可以通过Optioanl Packages规范来为实现某些产品的特殊功能制定相应的API。

    

     那我们通常所说的J2ME开发,大部分其实都是MIDP程序设计,那我们先来看几个名词的解释:

     MIDlet:一个可执行的应用手机程序的基本单位。

     MIDlet Suite:许多MIDlet所构成的集合一般称做MIDP Application(MIDP应用程序)。

 

总结:

sony ericsson P908 手机上运行J2ME程序 CLDC1.0,MIDP2.0.

 

二、运行J2ME 程序的三种方式:

1.命令行

     命令行方式 环境变量配置

     PATH = D:\Java\jdk1.5.0_05\bin;D:\Java\j2me_cldc\bin;D:\Java\midp2.0fcs\bin

     CLASSPATH = D:\Java\jdk1.5.0_\lib;D:\Java\midp2.0fcs\lib;D:\Java\midp2.0fcs\classes

     MIDP_HOME = D:\Java\midp2.0fcs

     测试 命令行运行命令:midp 出现模型手机. success!

     所需包下载地址:

     1> CLDC HTTP://java.sun.com/products/cldc

     2>MIDP http://java.sun.com/products/midp   3> JDK1.3  http://java.sun.com/j2se/1.3

2.J2ME Wireless ToolKit

3.Eclipse + WTK2.5

     配置Eclipse + WTK

     eclipse3.1 + wtk2.5 + eclipseme1.0.0  最好用jdk1.4

 

三、j2me用户界面编程

  

1.MIDP2.0触摸屏的实现方法模拟器上可以正常使用首先  设置模拟器:在你的WTK目录下的

\WTK22\wtklib\devices\DefaultColorPhone\DefaultColorPhone.properties  

的文件中有一行touch_screen=false,把它改成true就可以了。

2.Spacer 

专门用来在Formshang加空白间隔的。

Display display;

StringItem si=new StringItem("test","content",Item.PLAIN);

f.append(si);

f.append(new Sacer(50,50));

display.setCurrent(f);

3.如何接受数据是跟数据如何发送过来相关的

例如在client端writeUTF(message);writeInt(4);writeBoolean(true),

那么接受就应该readUTF();readInt();readBoolean();如果发送过来数据长度是可用的,

那么我们可以建立一个适当的数组来接受,如果不可用我们就要一个适当容量的数组来接受。

 

4.编码问题

http://www.regexlab.com/zh/encoding.htm

 

  1.1编码的概念就是把“字符”转化成“字节”

  1.2 字符,字节,字符串

   理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分:

 

  概念描述 举例

   字符          人们使用的记号,抽象意义上的一个符号。 '1', '中', 'a', '$', '¥', ……

   字节        计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。 0x01, 0x45, 0xFA, ……

   ANSI字符串  在内存中,如果“字符”是以 ANSI 编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为ANSI 字符串或者多字节字符串。 "中文123"(占7字节)

   UNICODE字符串  在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串。 L"中文 123"(占10字节)

    由于不同 ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种编码规则,才能够知

   道它包含了哪些“字符”。而对于 UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。

  

5.关于J2ME与C#通过HTTP进行通信时的乱码问题(源码)!

 

 时间: 2006-07-14 来自:every12555

        我是一个J2ME的新手,刚刚开始学习,在尝试进行J2ME与HTTP站点进行通信时中文乱码。在BBS上看了一些大侠们观点,最简单高效的方式就是与JSP进行通信WRITEUTF、READUTF。但是由于我想链接的目的站点是C#的,想用最小的改动就可以进行使用。

解决办法!将C#项目中Web.config中的编码设定为utf-8(默认就是utf-8)。

下面是J2ME的源码:

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.io.*;

import java.io.*;

import java.lang.String;;

public class HttpTest extends MIDlet

{

 

 private Display display;

 

 public HttpTest()

 {

  display = Display.getDisplay(this);

 }

 

 protected void startApp() throws MIDletStateChangeException

 {

  try {

   String url = "http://192.168.0.25/lt133/webform1.aspx?phone=13800000000&msg1=c2";

   HttpConnection hc = (HttpConnection)Connector.open(url);

   DataInputStream dis = new DataInputStream(hc.openInputStream());

 

   byte[] myData = new byte[100];

   String content="";

  

   dis.read(myData,0,myData.length);

   content = new String(myData,"UTF-8");

   Form f = new Form("HTTP Test");

   f.append(content);

   display.setCurrent(f);

  }

  catch(Exception e)

  {

   System.out.println(e.toString()) ;

   notifyDestroyed();

  }

 }

 

 

 protected void pauseApp()

 {

  }

 

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException

 {

 }

}

         代码很结构很简单,就不加注示和说明了。希望能对和我一样的初学者有所帮助。也希望老鸟们能多关爱我们这些热爱这项事业的新手!!!!

 

 

 

6. J2ME编程中的三种低级用户界面事件处理技术比较

 

作者:陈跃峰

 

出自:http://blog.csdn.net/mailbomb

 

 

 怎么才能学好J2ME?从初学到上手工作要多久? 6.

具备良好的java语言基础,不要还没有学习java语言就拿起一本J2ME的书来看。这样效果并不好,相反如果你有良好的java语言基础的话,J2ME就显得比较容易掌握!

 

如果你决定开始学习J2ME了,那么首先你应该清楚J2ME的体系结构是什么样的。当你真正清楚了Configuration和Profile的关系、了解了CDC和CLDC的区别后,那么你可以开始编写自己的HelloWorldMIDlet了

 

选择优秀的开发环境,J2ME的开发环境比较灵活。我推荐使用Eclipse和EclipseME插件。因为Eclipse的插件非常丰富且灵活,当你开发联网应用程序的时候安装Lomboz就可以了。当然你也可以选择Jbuilder等IDE,但是不推荐记事本!

 

在编写代码之前,应该多读一下好的代码。毕竟MIDlet的写法和一般的java Application不是很一样。推荐WTK中的Demo程序。

 

MIDP的API doc比较少,每个类的方法也很少。如果有时间的话,每天看个4-5个。这会对你帮助很大。毕竟它的API和J2SE的并不一样,只是它的子集,不应该想当然的使用。

 

清楚MIDP中高级UI和低级UI类的使用和区别,在你做用户界面的之前,思考好什么符合你的要求,推荐使用高级UI,这样更简单、可移植性更好。但是需要使用Canvas的时候不要犹豫,大胆使用!清楚高级事件和低级事件处理的机制。

 

在开发应用程序的时候尽量使用MVC模式,这样扩展性出色。

 

彻底掌握Record Management System,这是MIDP的一个重要子集。实现数据持久性存储不可缺少的系统。善于使用RecordFilter和RecordEnumeration来简化RMS的操作,在我的blog里面有一系列的关于RMS的文章,有时间就看看吧!

 

重视线程,如果你还不真正清楚线程的时候的话,那么赶快找资料看看吧。在J2ME的开发中,这非常的重要。具备了联网的能力则给你的应用程序插上了翅膀,而联网的时候为了避免堵塞一定要使用多线程技术。

 

时刻关注最新的技术,比如PIM,BlueTooth等都在慢慢的得到支持。你可以使用WTK2.2开发相关的程序了。

 

掌握Java中文问题,在J2ME中这个问题更加突出。你应该把你的应用程序放到手机上去测试这个问题而不是在模拟器上。

 

IO不用我说你也必须清楚,在J2ME中提供的IO包中,类比较少你更应该注意。

 

不要因为听说手机资源受限,在写程序的时候就顾虑重重,不要牺牲代码的可读性和可维护性,但是也不能乱用。这个时候你的java语言的基础起到了重要的作用!

 

如果想开发游戏,那么你应该多读相关的书籍。我这里一本J2ME游戏开发的书籍(电子版).想看的话可以email联系我,http://javap2p.nease.net/book/j2me_gamingbook_pdf.zip

 

如果有些问题想了很久都没有明白的话,可以到论坛上去问问,但是不要一有问题就问,自己思考后得到正确答案效果更好。或者把问题放下几天,也许自然而然就明白了!不是胡说。

 

多写代码!多多总结!简单的八个字,非常重要:)

 

7.在J2ME中获得手机IMEI的方法

  IMEI是Internation mobile entity identification的简称,在手机中输入*#06#可以显示该数字,长度为15位,全球唯一,永远不会冲突,所以可以作为识别用户的一个标志。

  下面是在J2ME中获得IMEI的方法:

  1、MOTO系列的手机可以通过读取系统的IMEI属性获得,代码如下:

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

  2、SIEMENS系列的手机可以通过读取系统的com.siemens.IMEI属性获得,代码如下:

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

 

8.j2me学习URL :http://www.blogjava.net/lf0206/

 

9.深入理解MIDP的界面类体系 

四、j2me开发中遇到问题及解决办法

问题1. 写第一个程序在sony ericsson p908, 多普达 LGkG90手机上运行时,用Eclipse打包Cdlc1.1 ,midp2.0在模拟器上正常运行。放到手机后无法安装。

     原因 :上述手机不支持CDLC1.1改用CDLC1.0后正常安装运行.

 

问题2 手机程序需要进行XML格式文档解析时,Eclipsse的Libraries中加第三方软件包KXML.JAR后,程序无法找到

      需要在Eclipse的Order and export中选中kxml.jar。

 

问题3 多普达手机696上运行J2ME程序时 直接安装无法正常运行。

      需要先在多普达手机上安装一个相应模拟器。

 

问题4 多普达830手机运行能在多普达696,LG K900,sony Ericson上正常运行的自贡手机OA系统时出现内空不能加载问题.

     J2me程序给类set值时用了setTitle() ,title是关键字不能用。

 

问题5 多普达手机830 运行自贡手机OA系统,从网络中获取在线调查图片时,不能显示问题。

     传过来的url地址问题,http://192.168.1.1/resultimage\00001.png.  分隔符应左下到右上.

 在一个线程中不能调用另一个线程。

 

问题6 多普达830手机运行自贡手机OA系统,登陆时某些用户名不能用如:陈世康,陈字,窦孝解,解字。

     原因:  830手机不支持去空格.tram()方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值