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

Java嵌入式开发之j2me--五

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
MIDP要求平台设备提供一个机制用来储存简单的数据记录,通过正常的平台事件,比如重新启动和电池更新维护系统的完整性。 MIDP称一个持久数据库为 RecordStore。 在我们的示例中, M

  MIDP要求平台设备提供一个机制用来储存简单的数据记录,通过正常的平台事件,比如重新启动和电池更新维护系统的完整性。 MIDP称一个持久数据库为
  RecordStore。 在我们的示例中, MIDlet打开并添加一条记录到 " MutualFundQuotes " RecordStore。
  正如我们的演示程序,能添加到 RecordStore中的唯一一种类型的记录是字节数组。 相同的 RecordStore是一个资源,它可以通过套件共享。
  根据 MIDP规范, 当 MIDlet从平台中删除后,RecordStore也会被从平台中删除。
  
  
  
  PDA简表
  
  
  
  Palm公司是开发PDA简表规范的领头人, 这个简表也是完善了 CLDC,在相当长的一段时间内,它都将是 kJava类程序包的替代品。
  Java规范建议这个 profile至少应当提供两个核心功能片段: 一个用户界面显示工具包,适合于 "有限的尺寸和深度显示 "和一个持久数据存储器机制。
  显示工具包应该是抽象窗口工具包的一个子集, 而持久机制将为应用程序、数据、配置/环境信息提供简单的数据存储。
  
  
  
  Foundation简表
  
  
  
  下面三种简表不是非经常见, 这三种简表的职责都是为了完善 CDC。 Personal和 RMI简表实际上是 Foundation简表的扩展。
  Foundation简表的任务是担任一个基础简表,便于以后开发出来的提供图形用户接口、 网络等功能的简表附着在它之上。 除了用于基础简表,
  Foundation简表还提供完整网络的支持,不管有没有使用图形用户接口。
  
  
  
  Personal简表
  
  
  
  在当前的规范需求下, Personal简表提供下一代 PersonalJava环境。这个简表允诺,提供互联网连接性和 Web保真度以及一个能够运行
  Java applets的 GUI。
  
  
  
  RMI简表
  
  
  
  回想一下 CDC配置为共享的、固定网络连接信息设备提供最小的 Java环境。 RMI简表将通过提供 Java到 Java的RMI来协助提供更好的网络连接性。
  通过使用 J2SE ( 1.2.x或更高版本的 ) RMI,这个简表将答应这些网络设备与其他系统应用程序交互操作 (这个系统不必也运行
  J2ME )。
  
  
  
  kjava类
  
  
  
  正如前面提到的那样, kjava类是最初提供的一个供测试用的类,在 Palm设备上运行早期的 KVM和配置版本。 它们将被 PDA简表代替。
  kjava类扩展了 CLDC并且提供一个图形用户接口、 Palm数据库访问,简单集合类和一个三角法计算器。
  
  
  
  在代码段2中,我使用 com.sun.kjava重写了 MIDP FundTracker程序,让它在 Palm上工作。 和前面的程序一样,这个简单的程序答应用户输入一个公基金代号并从WWW上的金融报价服务商那里取回报价。
  
  
  
  kjava应用程序被称作 spotlet。 事实上,一个应用程序可以由很多 spotlet组成,但是在任何时间只有一个 spotlet可以显示在
  Palm屏幕上。 在我们的例子中,我们创建一个基本 spotlet-- RequestFormSpotlet.java,为我们的两个
  spotlets子类提供用户界面。代码段 2扩展了基本的 RequestFormSpotlet以便得到并储存一个报价。 RetrieveSpotlet也扩展了基本
  RequestFormSpotlet并答应储存的报价被取回(见图)
  
  
  
  代码段2
  
  
  
  
  
  
   import com.sun.kjava.*;
  
  
  
  public final class FundSpotlet extends RequestFormSpotlet {
  
  
  
  public static void main (String args[]) {
  
  new FundSpotlet().draw();
  
  }
  
  
  
  private void draw() {
  
  initForm();
  
  setTitle("Fund Quote Requested");
  
  }
  
  
  
  public void penDown(int x, int y){
  
  if (getExitButton().pressed(x,y)){
  
  getGraphic().playSound(Graphics.SOUND_CONFIRMATION);
  
  System.exit(0);
  
  }
  
  if (getSymField().pressed(x,y))
  
  getSymField().setFocus();
  
  if (getGetButton().pressed(x,y)) {
  
  quoteRequested();
  
  }
  
  }
  
  
  
  private void storeQuote (String fund, String newQuote) {
  
  
  
  int dBType = 0x46554e44;
  
  int dbCreator = 0x43415454;
  
  com.sun.kjava.Database quoteDB;
  
  
  
  try {
  
  quoteDB = new com.sun.kjava.Database(dbType,
  
  dbCreator, com.sun.kjava.Database.READWRITE);
  
  if (!quoteDB .isOpen()) {
  
  
  
  com.sun.kjava.Database.create(0, "MutualFundQuotes",
  
  dbCreator, dbType, false);
  
  quoteDB = new com.sun.kjava.Database(dbType,
  
  dbCreator, com.sun.kjava.Database.READWRITE);
  
  }
  
  byte[] data = (fund + "#" + newQuote).getBytes();
  
  quoteDB.addRecord(data);
  
  quoteDB.close();
  
  }
  
  catch (Exception recordException) {
  
  System.out.println("Unable to store quote and/or use
  
  Mutual Fund Quote database.");
  
  }
  
  
  
  }
  
  
  
  private void getAndDisplayQuote() {
  
  String fundSymbol = getSymField().getText();
  
  if (fundSymbol.length() > 0) {
  
  String theQuote = QuoteService.getQuote(fundSymbol);
  
  if (theQuote != null) {
  
  storeQuote(fundSymbol, theQuote);
  
  message(theQuote);
  
  }
  
  else
  
  message("No quote. Check Symbol");
  
  }
  
  }
  
  
  
  private void quoteRequested() {
  
  message("");
  
  getGraphic().playSound(Graphics.SOUND_STARTUP);
  
  if ((getSymField().getText().length() > 0)) {
  
  getAndDisplayQuote();
  
  } else
  
  {
  
  message("Symbol required!");
  
  }
  
  }
  
  
  
  }
  
  
  
  
  
  
  
  
  在 RequestFormSpotlet程序中,类似于 MIDP中的 Display对象,单独的 Graphics治理许多 spotlet用户界面显示。
  
精彩图集

赞助商链接