龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java嵌入式开发之j2me--四

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
第四节 谈谈J2ME简表 虽然配置为一组通用设备提供了最小的 Java平台,但是应用程序开发者感爱好的是为一个个别的设备生产应用程序,当他们只是使用配置的话,他们编写的应用程序

  第四节 谈谈J2ME简表
  
  
  
  虽然配置为一组通用设备提供了最小的 Java平台,但是应用程序开发者感爱好的是为一个个别的设备生产应用程序,当他们只是使用配置的话,他们编写的应用程序就会有一些欠缺。
  配置必须满足所有的设备的最小的要求, 用户界面、输入机制和数据持久性有高度地设备具体性,每一种设备都有自己的用户界面、输入机制和数据存储方法,这些往往不在配置所满足的最小要求的范围之内。
  
  
  
  
  简表为相同消费电子设备的不同的生产商提供了标准化的 Java类库, 事实上,虽然配置规范的开发由 Sun领导,但是许多简表规范仍将继续由非凡设备的供给商领导。
  比如说, Motorola领导了行动电话和呼叫器简表规范的开发,又如 Palm 领导 PDA简表的开发。
  
  
  
  现在,五个已知简表已经有了规范, 记住,每个简表的责任都是为了完善配置的不足,下表列出了这五个简表:
  
  
  
  
  
  
   简 表
   完善配置
  
  
  
   Mobile information devices profile (MIDP)
   移动电话和呼叫器 CLDC
  
  
  
   Personal digital assistant profile
   Palm和Handspring的PDA 设备 CLDC
  
  
  
   Foundation profile
   用于所有不需要GUI的CDC设备的标准简表 CDC
  
  
  
   Personal profile
   替代PersonalJava的Foundation完善的简表 CDC
  
  
  
   RMI profile
   提供RMI的Foundation完善的简表 CDC
  
  
  
  
   
  
  现在我想谈一谈另一个Java类库集,它现在差不多可以被认为是另一个简表了。当Sun为Palm开发第一个KVM时,他们需要一组类来
  开发Palm的演示程序。这套类库被封装进 com.sun.kjava程序包, 在 CLDC早期的开发中,这些类被广泛的使用来测试和演示
  J2ME。因为 kjava是唯一的答应应用程序开发者使用 J2ME和 KVM开发应用程序的类,所以它就被广泛使用了。甚至到了今天,一个用于
  PDA或更非凡一点的 Palm的简表多已经在开发中,许多开发者仍然希望使用 kjava类来开发 PDA应用程序。尽管 kjava类不被支持,并且仅仅用于设计测试程序或演示程序,并且它们将被一个即将到来的简表所替代,但是开发者们仍然热衷于使用它来开发。
  
  
  
  MIDP
  
  
  
  Mobile Information Device Profile(移动信息设备简表 ,简称 MIDP ),第一个实现的简表,补充了
  CLDC并且提供给用程序语义和控件、用户界面、持久存储器、网络和用于移动电话的计时器、双通道呼叫器和其他无线电设备。 因为 MIDP和
  CLDC两者都有引用实现,我们可以使用一个例程来研究一下这个简表。
  
  
  
    下面的例子是一个答应用户输入代表想知道的基金报价的代号的例子。应用程序然后通过 HTTP接到一个金融网站,获得基金报价,把价格储存在一个数据库,然后把价格返回给用户。
  
  
  
  
  
  
  
   // 到如需要的J2ME类
  
  import javax.microedition.midlet.*;
  
  import javax.microedition.lcdui.*;
  
  import javax.microedition.rms.*;
  
  
  
  // 扩展MIDlet类来构建我们的自定义MIDlet
  
  public class FundTracker extends MIDlet implements
  
  CommandListener {
  
  
  
  file&://显示治理者变量
  
  private Display display = null;
  
  file&://MIDlet的表单变量
  
  private RequestForm reqForm = null;
  
  
  
  file&://MIDlet构建器
  
  public FundTracker () {
  
  display = Display.getDisplay(this);
  
  reqForm = new RequestForm("Fund Tracker");
  
  reqForm.initForm();
  
  reqForm.setCommandListener(this);
  
  }
  
  
  
  file&://开始 MIDlet 应用程序
  
  protected void startApp() {
  
  display.setCurrent(reqForm);
  
  }
  
  
  
  file&://暂停 Midlet
  
  protected void pauseApp() {
  
  }
  
  
  
  file&://销毁Midlet
  
  protected void destroyApp(boolean unconditional) {
  
  }
  
  
  
  file&://通过监听者响应命令
  
  public void commandAction(Command c, Displayable s) {
  
  if (c == reqForm.getExitCommand()) {
  
  destroyApp(false);
  
  notifyDestroyed();
  
  return;
  
  }
  
  if ((c == reqForm.getGetCommand()) &&
  
  (reqForm.getSymField().getString().length() > 0)) {
  
  getAndDisplayQuote();
  
  } else
  
  {
  
  reqForm.getMsgString().setText("Symbol required");
  
  }
  
  }
  
  
  
  file&://储存由#分开的成对的基金字符串和报价字符串
  
  private void storeQuote (String fund, String newQuote) {
  
  
  
  file&://数据库变量
  
  
  
  RecordStore quoteDB = null;
  
  
  
  try {
  
  quoteDB = RecordStore.openRecordStore(
  
  "FundQuotes", true);
  
  byte[] data = (fund + "#" + newQuote).getBytes();
  
  int size = data.length;
  
  quoteDB.addRecord(data, 0, size);
  
  quoteDB.closeRecordStore();
  
  }
  
  catch (Exception recordException) {
  
  System.out.println("Unable to store quote and/or
  
  use Fund Quote database.");
  
  }
  
  }
  
  
  
  file&://通过QuoteService类取回提交的代号表示的基金报价
  
  private void getAndDisplayQuote(){
  
  String fundSymbol = reqForm.getSymField().getString();
  
  if (fundSymbol.length() > 0) {
  
  String theQuote = QuoteService.getQuote(fundSymbol);
  
  if (theQuote != null) {
  
  storeQuote(fundSymbol, theQuote);
  
  reqForm.getMsgString().setText(theQuote);
  
  }
  
  else
  
  reqForm.getMsgString().setText("No quote" +
  
  ´
  
精彩图集

赞助商链接