程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 解析KJava在移動設備開發支撐中的利用

解析KJava在移動設備開發支撐中的利用

編輯:J2ME
摩托羅拉A6288、388型手機的登場,伴隨著一個亮點:自身帶有KJava虛擬機(KVM),能夠通過多種方法下載且能夠運行用戶用KJava編寫的符合MIDP1.0規范的利用程序。後來,又有多款手機支撐KJava。實際上,KJava不僅能夠為A6288等手機編寫利用程序,而且還可認為其它一些移動信息設備編寫利用程序。這類嵌進式程序和一般的Java程序相比,有它的特別之處,本文將對KJava及其利用進行先容。

    1.KJava簡介

 Java語言最初是為嵌進式系統設計的一項產品,在Java 2中為了區分各種不同的利用,又細分成了Java 2 Enterprise Edition(J2EE)、Java 2 Standard Edition(J2SE)和Java 2 Micro Edition(J2ME)三種版本,其中J2ME又稱作KJava。

    在J2SE中,它定義了Java規范的核心類函數庫(即Java.*)和擴大類函數庫(即Javax.*),它重要定位在客戶真個利用程序。J2EE重要定位於服務器真個利用程序,它除了支撐J2SE所定義的核心類函數庫之外,還增加了一些擴大函數類庫,如支撐Serverlet/JSP的 Javax.servlet.*等。J2ME只支撐J2SE所定義的核心函數類庫的一部分,此外,在J2ME中還增加了一些支撐嵌進式系統的擴大類函數庫,如Javax.microedition.*等。

 同樣是嵌進式設備,它們在運算才能、電力供應等方面還是有很大的差別。Connected Limited Device Configuration(CLDC)規范描寫的就是那些運算才能有限、電力供應有限的嵌進式設備,如手機等;而Connected Device Configuration(CDC)規范則描寫的是像電視機頂盒這樣運算才能較強、電力供應充分的系統。J2ME分辨支撐這兩種不同的配置。在同一種配置下,J2ME又通過Profile來定義與特定嵌進式設備相干的擴大類函數庫。

在傳統的Java環境中,為了防止程序在傳送途中被修正以及其它一些安全上的考慮,當程序被種別載進器載進後,緊接著要進行Byte Code審核,審核通過以後才答應Java虛擬機履行它。這一把持在PC機上履行從速度上來看沒有什麼標題,但是在CLDC所描寫的這類系統中,要想作完整雷同的處理,從處理才能和速度上來看就顯得有些力不從心了。為懂得決這個標題,程序設計職員需要在程序設計結束之後額外再多做一件事:預先審核。通過預先審核,會在終極的類文件中加進一些特別的符號,當該程序下載到目標平台上往履行時,可以以較快的速度完成審核把持。

    2. Motorola SDK

下面以摩托羅拉A6288型手機為例來具體講解KJava的程序設計。在摩托羅拉A6288中應用了兩顆CPU,一顆是Dragon Ball VZ 33MHz,用於個人數字處理,另外一顆用於通信的處理。系統為用戶預留了約1M的內存空間,支撐符合MIDP 1.0規范的KJava利用程序。我們可以到摩托羅拉的官方網站往下載開發工具:CodeWarrior(試用版),下面的內容就是基於這一開發工具。

  在 CodeWarrior中,它包含了摩托羅拉的SDK,它實現了CLDC和MIDP 1.0。它所實現的CLDC類庫有Java.io.*、Java.lang.*、Java.util.*和 Javax.microedition.io.*,實現的MIDP類庫有Javax.microedition.lcdui.*、 Javax.microedition.rms和Javax.micromedition.midlet。

 我們在PC環境下編寫的嵌進在浏覽器中的Java程序叫做Applet,編寫的程序必需要從Applet類擴大自己的類。而為手機這類移動信息設備編寫的 KJava程序叫做MIDlet,程序必需要從MIDlet類擴大自己的類。一個MIDlet程序具備如下的典范結構:
 

    當程序被啟動時,startApp()被系統調用。(當程序剛開端運行時有啟動過程,程序被暫停後也可以被再次啟動)。當程序被暫時結束運行時,pauseApp()被調用。當程序履行結束時destroyApp()被調用。我們可以根據實際情況在各函數中進行相應的處理。

    在摩托羅拉SDK中沒有AWT或者SWING,由於它們的實現會耗費太多的資源,摩托羅拉SDK只是在Javax.microedition.lcdui中實現了基於LCD的一些比擬簡略的設計用戶界面的功效。SDK中定義了各種Displable類(如Form),程序中當前顯示的畫面必需是某個 Displable的實例,在該實例中可以再放置按鈕、文本編纂框、單選框等UI。

    3. 舉例

    下面是用KJava編寫的一個可以在A6288型手機上運行的簡略的例子。具體程序如下

簡略的例子

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);
        }
    }
}

 



    程序運行後,可以根據用戶選擇的不同菜單項顯示不同的內容。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved