麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > Java > 正文

解析 KJava 在移動(dòng)設(shè)備開(kāi)發(fā)支持中的應(yīng)用

2024-07-21 02:39:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  摩托羅拉A6288、388型手機(jī)的登場(chǎng),伴隨著一個(gè)亮點(diǎn):自身帶有Kjava虛擬機(jī)(KVM),能夠通過(guò)多種方式下載且能夠運(yùn)行用戶(hù)用KJava編寫(xiě)的符合MIDP1.0規(guī)范的應(yīng)用程序。后來(lái),又有多款手機(jī)支持KJava。 實(shí)際上,KJava不僅能夠?yàn)锳6288等手機(jī)編寫(xiě)應(yīng)用程序,而且還可以為其它一些移動(dòng)信息設(shè)備編寫(xiě)應(yīng)用程序。這類(lèi)嵌入式程序和一般的Java程序相比,有它的非凡之處,本文將對(duì)KJava及其應(yīng)用進(jìn)行介紹。
  
  1.KJava簡(jiǎn)介
  Java語(yǔ)言最初是為嵌入式系統(tǒng)設(shè)計(jì)的一項(xiàng)產(chǎn)品,在Java 2中為了區(qū)分各種不同的應(yīng)用,又細(xì)分成了Java 2 EnterPRise Edition(J2EE)、Java 2 Standard Edition(J2SE)和Java 2 Micro Edition(J2ME)三種版本,其中J2ME又稱(chēng)作KJava。
  
  在J2SE中,它定義了Java規(guī)范的核心類(lèi)函數(shù)庫(kù)(即Java.*)和擴(kuò)展類(lèi)函數(shù)庫(kù)(即Javax.*),它主要定位在客戶(hù)端的應(yīng)用程序。J2EE主要定位于服務(wù)器端的應(yīng)用程序,它除了支持J2SE所定義的核心類(lèi)函數(shù)庫(kù)之外,還增加了一些擴(kuò)展函數(shù)類(lèi)庫(kù),如支持Serverlet/jsp的Javax.servlet.*等。J2ME只支持J2SE所定義的核心函數(shù)類(lèi)庫(kù)的一部分,此外,在J2ME中還增加了一些支持嵌入式系統(tǒng)的擴(kuò)展類(lèi)函數(shù)庫(kù),如Javax.microedition.*等。
  
  同樣是嵌入式設(shè)備,它們?cè)谶\(yùn)算能力、電力供給等方面還是有很大的差別。Connected Limited Device Configuration(CLDC)規(guī)范描述的就是那些運(yùn)算能力有限、電力供給有限的嵌入式設(shè)備,如手機(jī)等;而Connected Device Configuration(CDC)規(guī)范則描述的是像電視機(jī)頂盒這樣運(yùn)算能力較強(qiáng)、電力供給充足的系統(tǒng)。J2ME分別支持這兩種不同的配置。在同一種配置下,J2ME又通過(guò)Profile來(lái)定義與特定嵌入式設(shè)備相關(guān)的擴(kuò)展類(lèi)函數(shù)庫(kù)。
  
  在傳統(tǒng)的Java環(huán)境中,為了防止程序在傳送途中被篡改以及其它一些安全上的考慮,當(dāng)程序被類(lèi)別載入器載入后,緊接著要進(jìn)行Byte Code審核,審核通過(guò)以后才答應(yīng)Java虛擬機(jī)執(zhí)行它。這一操作在PC機(jī)上執(zhí)行從速度上來(lái)看沒(méi)有什么問(wèn)題,但是在CLDC所描述的這類(lèi)系統(tǒng)中,要想作完全相同的處理,從處理能力和速度上來(lái)看就顯得有些力不從心了。為了解決這個(gè)問(wèn)題,程序設(shè)計(jì)人員需要在程序設(shè)計(jì)結(jié)束之后額外再多做一件事:預(yù)先審核。通過(guò)預(yù)先審核,會(huì)在最終的類(lèi)文件中加入一些非凡的符號(hào),當(dāng)該程序下載到目標(biāo)平臺(tái)上去執(zhí)行時(shí),可以以較快的速度完成審核操作。
  
  2. Motorola SDK
  下面以摩托羅拉A6288型手機(jī)為例來(lái)具體講解KJava的程序設(shè)計(jì)。在摩托羅拉A6288中使用了兩顆CPU,一顆是Dragon Ball VZ 33MHz,用于個(gè)人數(shù)字處理,另外一顆用于通訊的處理。系統(tǒng)為用戶(hù)預(yù)留了約1M的內(nèi)存空間,支持符合MIDP 1.0規(guī)范的KJava應(yīng)用程序。我們可以到摩托羅拉的官方網(wǎng)站去下載開(kāi)發(fā)工具:CodeWarrior(試用版),下面的內(nèi)容就是基于這一開(kāi)發(fā)工具。
  
  在CodeWarrior中,它包含了摩托羅拉的SDK,它實(shí)現(xiàn)了CLDC和MIDP 1.0。它所實(shí)現(xiàn)的CLDC類(lèi)庫(kù)有Java.io.*、Java.lang.*、Java.util.*和Javax.microedition.io.*,實(shí)現(xiàn)的MIDP類(lèi)庫(kù)有Javax.microedition.lcdui.*、Javax.microedition.rms和Javax.micromedition.midlet。
  
  我們?cè)赑C環(huán)境下編寫(xiě)的嵌入在瀏覽器中的Java程序叫做Applet,編寫(xiě)的程序必須要從Applet類(lèi)擴(kuò)展自己的類(lèi)。而為手機(jī)這類(lèi)移動(dòng)信息設(shè)備編寫(xiě)的KJava程序叫做MIDlet,程序必須要從MIDlet類(lèi)擴(kuò)展自己的類(lèi)。一個(gè)MIDlet程序具備如下的典型結(jié)構(gòu):
  
  
  public class HelloWord extends MIDlet
  {
  HelloWord()
  {……}
  
  public void startApp()
  {……}
  
  public void pauseApp()
  {……}
  
  public void destroyApp(boolean unconditional)
  {……}
  }
  
  當(dāng)程序被啟動(dòng)時(shí),startApp()被系統(tǒng)調(diào)用。(當(dāng)程序剛開(kāi)始運(yùn)行時(shí)有啟動(dòng)過(guò)程,程序被暫停后也可以被再次啟動(dòng))。當(dāng)程序被暫時(shí)停止運(yùn)行時(shí),pauseApp()被調(diào)用。當(dāng)程序執(zhí)行結(jié)束時(shí)destroyApp()被調(diào)用。我們可以根據(jù)實(shí)際情況在各函數(shù)中進(jìn)行相應(yīng)的處理。

  
  在摩托羅拉SDK中沒(méi)有AWT或者SWING,因?yàn)樗鼈兊膶?shí)現(xiàn)會(huì)耗費(fèi)太多的資源,摩托羅拉SDK只是在Javax.microedition.lcdui中實(shí)現(xiàn)了基于LCD的一些比較簡(jiǎn)單的設(shè)計(jì)用戶(hù)界面的功能。SDK中定義了各種Displable類(lèi)(如Form),程序中當(dāng)前顯示的畫(huà)面必須是某個(gè)Displable的實(shí)例,在該實(shí)例中可以再放置按鈕、文本編輯框、單選框等UI。
  
  3. 舉例
  下面是用KJava編寫(xiě)的一個(gè)可以在A6288型手機(jī)上運(yùn)行的簡(jiǎn)單的例子。具體程序如下:
  
  import Java.io.*;
  import Javax.microedition.lcdui.*;
  import Javax.microedition.midlet.*;
  
  public class HelloWorld extends MIDlet implements CommandListener
  {
  
  private MainCanvas myCanvas;
  private Display myDisplay;
  private Command c1,c2,c3;
  
  HelloWorld()
  {
  myCanvas=new MainCanvas();
  myCanvas.addCommand(c1=new Command("First",Command.SCREEN,1));
  myCanvas.addCommand(c2=new Command("Second",Command.SCREEN,1));
  myCanvas.addCommand(c3=new Command("Third",Command.SCREEN,1));
  myCanvas.setCommandListener(this);
  myDisplay = Display.getDisplay(this);
  myDisplay = Display.getDisplay(this);
  }
  
  public void startApp() throws MIDletStateChangeException
  { myCanvas.setUp("first");
  myDisplay.setCurrent(myCanvas);
  }
  
  public void pauseApp() { }
  
  public void destroyApp(boolean unconditional) { }
  
  public void commandAction(Command c,Displayable d)
  { myCanvas.setUp(c.getLabel()); }
  
  class MainCanvas extends Canvas
  { String ts;
  
  MainCanvas()
  { super();
  ts=new String("first");
  }
  
  public void setUp(String s)
  { ts=new String(s); }
  
  public void paint(Graphics g)
  { g.setColor(0xFFFFFF);
  g.fillRect(0, 0, getWidth(), getHeight());
  g.setColor(0);
  g.drawString("Current is the "+ts,getWidth()/2,60,
  Graphics.HCENTER Graphics.TOP);
  }
  }
  }
  
  程序運(yùn)行后,可以根據(jù)用戶(hù)選擇的不同菜單項(xiàng)顯示不同的內(nèi)容。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 五月天影院,久久综合, | 欧美一级做一a做片性视频 日韩黄色片免费看 | 国产免费传媒av片在线 | 中国的免费的视频 | 天堂成人国产精品一区 | 在线中文字幕网站 | 男女污视频在线观看 | 国产免费一区视频 | 日本68xxxx | 在线观看国产 | 国产电影精品久久 | 精品一区二区三区在线视频 | 国产一级做a | 中文字幕xxx| 色综合视频 | 久久久久久久久久久久免费 | 深夜福利视频绿巨人视频在线观看 | 狠狠干伊人网 | 色呦呦一区二区三区 | 免费成人 | 看毛片电影 | 久久久久久久亚洲视频 | 欧美一级美片在线观看免费 | 黄网站进入 | 亚洲国产精品久久久久 | 国产一级毛片高清视频 | 鸳鸯谱在线观看高清 | 午夜爽爽爽男女免费观看hd | 久久凹凸| 特级毛片免费视频 | 日韩欧美激情视频 | 国产一区二区三区视频在线观看 | 美女一级视频 | 嫩呦国产一区二区三区av | 桥本有菜免费av一区二区三区 | 久啪视频 | a视频在线播放 | 亚洲成人免费影视 | 182tv成人福利视频免费看 | 精品99在线视频 | 特片网久久 |