J2ME

Компьютер, програм хангамжийн чиглэлээр бие даалт, курсын ажил хийнэ. Үүнд: Алгоритм, С/С++, Pascal, Java, C#, MySQL, ASP.NET, Гар утасны програм

Юуны өмнө Java-ийн тухай товчхон дурьдъя.
1991 онд James Gosling Java хэлний үндэс суурийг тавьжээ. Анх энэ хэлийг Oak(царс) гэж нэрлэж байсан бөгөөд дараа нь Green болж, удалгүй Java нэртэй болсон байна.
            Java бол SUN Microsystems корпорацийн бүтээсэн нэгэн төрлийн объект хандлагат програмчлалын хэл бөгөөд анх 1995 онд олон нийтэд танилцуулагджээ. Програмчлалын бүтэц синтакс нь С++-тэй төстэй. Java-г ашиглан бие даасан application болон applet бичиж болно. Java маш өргөн ойлголт учраас түүний талаар тайландаа дэлгэрэнгүй оруулах ямар ч боломжгүй юм. Ингээд гол сэдэв рүүгээ оръё.
            SUN корпораци нь технологи хөгжихийн хирээр үүсэж буй асуудлуудыг шийдвэрлэх онцлогтой нь холбогдуулан Java платформыг 3 хуваан тус тусад нь хөгжүүлж эхэлсэн. Үүнд:
Ø  J2EE: Java 2 Platform Enterprise Edition. Энэ нь сервер компьютерүүдэд томоохон системүүдийг бичихэд хэрэглэгдэнэ.
Ø  J2SE: Java 2 Platform Standard Edition. Энэ нь персональ компьютерүүдэд ашиглагдах системүүдийг бичихэд хэрэглэгдэнэ.
Ø  J2ME: Java 2 Platform Micro Edition. Энэ нь жижиг төхөөрөмжүүдийг програмчлахад хэрэглэгдэнэ.

            KVM (K Virtual Machine)
            1998 онд SUN лабораторид Spotless хэмээх төсөл эхэлсэн бөгөөд зорилго нь Java хэлний маш хязгаарлагдмал нөөцтэй систем(гар утас)-үүдэд хэрэглэх боломжтой хувилбарыг гаргах явдал байлаа. Энэ төсөл нь эхний үед зөвхөн судалгааны ажил байсан боловч Motorola компаний нөлөөгөөр уг төслийг бодит систем болгосон. Төслийн үр дүнд KVM буюу K Virtual Machine хувилбар гарч ирсэн. KVM нь:
-       Өөрөө 40 эсвэл 80 кило байт санах ой шаардана
-       Динамик санах ой(heap)-н хэмжээ нь ердөө л 20-40 килобайт
-       16 битийн 25 МГц хурдтай процессор дээр ажиллах чадвартай байлаа.
           
            CLDC (Connected, Limited Device Configuration)
            Нэгэнт Motorola, Nokia, NTT DoCoMo, Palm Computing, RIM, Siemens болон бусад корпорациуд KVM-ийг сонирхож эхэлсэн тул Java-ийн стандартчлалыг би болгох шаардлагатай болсон. Тэгэхгүй бол корпораци бүрт өөр өөр KVM-ийн имплиментаци(implementation) үүсч, утас хоорондын зөрчил улам ихсэх байв. Стандартчлах ажилд 18 компани, корпораци оролцон үр дүнд нь CLDC стандарт бий болов (1999 оны 10-р сард дууссан). Энэ стандарт нь ямар нэг төхөөрөмжид тусгайлан зориулагдаагүй бөгөөд ямар ч төхөөрөмжид хэрэглэгдэх үндсэн асуудлуудыг тооцсон байв. CLDC нь:
-       128 кило байт санах ой шаардана
-       Runtime-д 32 кило байт санах ой хуваарилагдана
-       Хэрэглэгчийн интерфэйс хязгаарлагдмал
-       Wireless ашиглан сүлжээнд холбогдох боломжтой
CLDC 1.0, CLDC 1.1 хувилбарууд гарсан.
           
            MIDP (Mobile Information Device Profile)
            Дараачийн стандартчлалд 22 компани оролцож, CLDC дээр үндэслэсэн MIDP стандарт үүсэв(1999 оны 11-р сар). Энэ стандарт нь ялангуяа гар утаснуудад хэрэглэгдэх API(Application Program Interface)-үүдэд гол анхаарлаа хандуулсан. MIDP нь:
-       Дэлгэцийн хэмжээ хамгийн багадаа 96*54 пиксел байна
-       Харьцах дэлгэц болон ямар нэгэн гар(гар утасны эсвэл ердийн QWERTY гар) заавал байна
-       Хувирдаггүй(тогтмол) 128 кило байт санах ой шаардана
-       Wireless-ээр холбогдох боломжтой
            Энэ мэтчлэн төхөөрөмжүүд хоорондоо санах ой, боломжоороо ялгаатай тул J2ME нь задран хувилбаруудад хуваагдсан.
MIDP 1.0, MIDP 2.0, MIDP 2.1 хувилбарууд гарсан.

Тохиргоонууд
            Хэдийгээр хувилбарууд(Configurations)-д задарсан ч нэг хувилбар дотор мөн л ялгаатай маш олон төхөөрөмжүүд байдаг тул SUN нь J2ME-г цааш нь улам задлан тохиргоонууд(profiles)-д хуваасан. Өөрөөр хэлбэл, CLDC нь дотроо олон янзын төхөөрөмж, утаснуудад зориулсан олон тохиргоотой гэсэн үг. Тохиргоо бүр нь уг төхөөрөмжид л хамааралтай тусгай класс, функцүүдийг л агуулна. Хамгийн түгээмэл хэрэглэгддэг CLDC-ийн тохиргоо бол MIDP юм.

COMPILER-үүд

            Дараах Compiler-үүдийг ашиглаж болно. Үүнд:
1.    Netbeans 6.7: Өөр дээр нь кодоо бичиж, compile, build, debug хийх боломжтой.
2.    Micro Edition Software Development Kit: Бас өөр дээр нь код бичиж, конпайл хийх боломжтой.
3.    Wireless Toolkit: Код бичих талбаргүй. Compile, build, run хийх мөн JAR, JAD файл үүсгэх чадвартай.
Би өөрөө Wireless Toolkit-ийг ашигладаг учраас хэрхэн ашиглах талаар бичье.
1.    http://java.sun.com/j2me хаягаар орж татаж авч, суулгана. Суулгасны дараа автоматаар С:\WTK2.5.2_01, C:\Users\userName\j2mewtk фолдерүүд үүснэ.
2.    Netbeans эсвэл Eclipse дээр Project-оо үүсгэж, Library-д нь C:\WTK2.5.2_01\lib дотор байгаа JAR файлуудыг импортлож өгнө.
3.    Java классаа үүсгэж, кодоо бичнэ.
4.    Wireless Toolkit-ээ нээж, Project-ээ үүсгэнэ. New Project цонхны Project Name-д Project-ийн нэрийг, MIDlet Class Name-д өмнөх үүсгэсэн (Netbeans эсвэл Eclipse дээр) классын нэрийг бичиж өгнө.
5.    Settings рүү орж програмаа ямар төрлийн утсанд зориулан бичиж байгаа тохируулж өгнө. Жнь: MIDP 1.0, MIDP 2.0, MSA г.м.
6.    Уг JAVA файлыг C:\Users\userName\j2mewtk\2.5.2\apps\projectName\src фолдерт хуулна.
7.    Build дээр дарж build хийнэ.
8.    Run дарж ажиллуулна.
9.    Project -> Package -> Create Package-ийг дарж JAR файлаа үүсгэнэ.
10. JAR, JAD файлууд C:\Users\userName\j2mewtk\2.5.2\apps\projectName\bin фолдерт үүснэ. Ингээд JAR файлыг утсанд хуулах л үлдлээ. JAD файл нь энгийн компьютер дээр гар утасны үүргийг гүйцэтгэгч програмыг(Wireless Toolkit-д агуулагдана) ашиглан бие даан ажиллах боломжтой. 

“SimpleMIDlet” ЖИШЭЭ

Жишээ 1. SimpleMIDlet.java

import javax.microedition.midlet.MIDlet;

public class SimpleMIDlet extends MIDlet {
    public SimpleMIDlet() {
       
    }
    protected void startApp()  {
        System.out.print("This is a \"SimpleMIDlet\" example");
    }

    protected void pauseApp() {   
    }

    protected void destroyApp(boolean arg0) {   
    }
}

MIDlet ангиас удамшуулж, javax.microedition.midlet.MIDlet-ийг импортолж өгнө. MIDlet анги нь:
-       Байгуулагч функц(constructor). Манай жишээний хувьд public SimpleMIDlet() { }
-       protected void startApp()  { }
-       protected void pauseApp() { }
-       protected void destroyApp(boolean b) { }
функцүүдийг заавал агуулдаг.
            startApp(). MIDLet-ийг идэвхтэй болонгуут энэ функц дуудагддаг. Жишээ нь: MIDlet ачаалагдах, утсаар орж ирсэн ярианы дараа тоглоомоо үргэлжлүүлэх г.м. Тиймээс анх ачаалагдаж эхлэхэд ямар код нь ажиллаж, түр зогссоны дараа ямар код ажиллахыг тодорхой болгох шаардлагатай.
            pauseApp(). Түр зогсооно. Янз бүрийн шалтгаанаар түр зогсож орно. Жишээлбэл, тоглоом тоглож байх зуур дуудлага, мессеж орж ирэх эсвэл хэрэглэгч өөрөө түр зогсоох г.м. Энэ функц дотор тоглоомын(программын) төлвийг хадгалах, цагтай холбоотой асуудлуудыг шийдэх зэргийг зохицуулж болно. MIDlet өөрөө өөрийгөө notifyPause() функц дуудан зогсоож болдог.
            destoryApp(). Програмыг дуусгах үед дуудагдана. Энд тоглолтыг хадгалах, нөөцийг суллах(сүлжээний холболтыг хаах) зэрэг үйлдэл хийж өгч болно.

FORM БА ITEM КОМПОНЕНТҮҮД
            Form нь бусад компонентүүдийн гол агуулагч бөгөөд компонентүүд нь Item ангийн дэд ангиуд юм.
            Form-ыг дараах 2 аргаар зарлаж, хэрэглэж болно. Үүнд:
1.    public From(String title)
2.    public Form(String title, Item [] items).
-       title нь формын гарчиг(String төрлийн).
      Эхний аргаар хоосон Form үүсгэж байгаа бол, хоёрдох арга нь Item төрлийн массиваар тодорхойлогдсон коментүүдийг агуулсан Form үүсгэж байна.
      Form нь Item компонентүүдээс гадна коммандууд, String төрлийн дурын утга, зураг, ticker агуулдаг.
      Дараах төрлийн Item компонентүүд байдаг:
-       DateField
-       StringItem
-       TextField
-       List
-       ChoiceGroup
-       Spacer

DateField
            DateField нь java.Util.Date санд тодорхойлогддог Date төрлийн объектыг визуалаар харуулдаг бөгөөд javax.microedition.lcdui.DateField санд агуулагддаг. DateField-ийг програмдаа ашиглахдаа үүгээр дамжуулан  хэрэглэгчид системийн цаг хугацааг өөрчилж болдог байхаар тодорхойлж өгч болно.
            DateField-ийн байгуулагч функц нь дараах 2 хэлбэртэй байна. Үүнд:
1.    DateField(String label, int mode)
2.    DateField(String label, int mode, TimeZone timeZone)
mode нь дараах төрлүүдтэй байна:
-       DateField(String label, DateField.DATE_TIME ): Цаг, минут болон он, сар, өдрийг зэрэг харуулна.
-       DateField(String label, DateField.TIME ): Зөвхөн цаг, минутыг харуулна.
-       DateField(String label, DateField.DATE ): Зөвхөн он, сар, өдрийг харуулна.
            Үүнийг дараах жишээ(Жишээ 2. DateField.java)-гээр харуулъя.
            Form-д компонент бусад янз бүрийн юм нэмэхэд буюу Form дээр байрлуулахад form.append(T t) фунцийг ашиглана. нь Item, String, Image гэсэн 3 төрлийн утга авна. Харин комманд нэмэхдээ form.add(Command command) функцийг ашиглана. Коммандын талаар дараа гарах болно. 

Жишээ 2. DateField.java
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import java.util.Date;

public class DateFieldMIDlet extends MIDlet {

  private DateField dateDateField = new DateField("date:", DateField.DATE);

  private DateField timeDateField = new DateField("time:", DateField.TIME);

  private DateField bothDateField = new DateField("both:", DateField.DATE_TIME);

        private Display display;                     
                                                      
  public DateFieldMIDlet() {
    display = Display.getDisplay(this);
    Date now = new Date();
    dateDateField.setDate(now);
    timeDateField.setDate(now);
    bothDateField.setDate(now);
  }

  public void startApp() {
    Form aForm = new Form("DateField");

    aForm.append(dateDateField);
    aForm.append(timeDateField);
    aForm.append(bothDateField);
    display.setCurrent(aForm);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }
}                       
Display нь тухайн төхөөрөмж(гар утас)-ийн дэлгэцийг тодорхойлно.
display = Display.getDisplay(this) нь display-д тухайн утасны дэлгэцийг оноож байна.
Дэлгэцэнд яг юу харуулах вэ гэдгийг
setCurrent(Displayable displayable) функцээр тодорхойлно. Үүнд Displayable нь Form, TextBox, Canvas зэрэг утга авна.
DateField-д setDate(Date date)setLabel(String label)setInputMode(Int mode) функцүүдийг ашиглан утга олгож, мөн утгыг нь өөрчилж болно.
Харин getDate()getLabel()getInputMode() функцүүдээр харгалзах утгуудыг авна.

 StringItem
StringItem нь дэлгэцэнд текст харуулахад түүнчлэн точвч(button)-оор хэрэглэгдэнэ. javax.microedition.lcdui.StringItem санд агуулагдана.
Байгуулагч функц нь дараах хэлбэртэй байна:
StringItem(String label, String string);
Жишээ нь:
StringItem sItem = new StringItem(“School:”,”SCMS”);
Form form = new Form(“Simple”);
form.append(sItem);
sItem.setLabel(“Profession:”);
sItem.setText(“Software Engineer”);
form.appnd(sItem);
Үр дүн:
            School: SMCS
            Profession: Software Engineer
            Дэлгэцэнд яг ингэж label нь тодоор харагдана.
            TextField
            TextField нь ердийн текст оруулах талбар юм.  TextField-ийн label, оруулж болох тэмдэгтүүдийн хамгийн их тоо, оруулж болох текстийн төрлийг(ямар ч текст, тоо, утасны дугаар, нууц үг г.мтодорхойлж өгнө.
            Байгуулагч функц нь дараах хэлбэртэй:
                        TextField(String label, String text, int maxSize, int constraints);
constraints нь дараах утгуудыг авна:
·         TextField.ANY
·         TextField.CONSTRAINT_MASK
·         TextField.EMAILADDR
·         TextField.NUMERIC
·         TextField.PASSWORD
·         TextField.PHONENUMBER
·         TextField.URL
            Эдгээр нь ямар төрөлтэй утга авах нь нэрээс нь ойлгомжтой байна. setLabel(String label), setMaxSize(int size), setString(String string), setConstraints(int constraints) функцүүдээр утга олгож, утгыг нь өөрчилж, getLabel(), getMaxSize(), getString(), getConstraints() функцүүдээр утгын мэдээлэл авч болно.

            List
            List нь сонголтуудын жагсаалт юм. Жагсаалтын элемэнт текст, зураг байж болно.
            Байгуулагч фунц нь
-               List(String label, int type)
-               List(String title, int type, String[] stringElements, Image[] imageElements) гэсэн хоёр төрөлтэй.

·         title – List-ийн гарчиг
·         type – List-ийн төрөл бөгөөд List.EXCLUSIVE, List.MULTIPLE, List.IMPLICIT гэсэн гурван утга авна.
·         stringElements – жагсаалтын элемент бүрт тэмдэгтэн цуваатай утга олгох
·         imageElements - жагсаалтын элемент бүрт зурган утга олгох
stringElements  imageElements null утгатай байж болно.
-       append(String stringPart, Image imagePart) - жагсаалтын төгсгөлд элемэнт нэмэх
-       insert(int elementNum, String stringPart, Image imagePart) - elementNum дугаарт элемент нэмэх
-       delete(int elementNum) – elementNum дугаартай элементийг устгах
Жишээ 3. J2METravelList.java
import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;

public class J2METravelList extends MIDlet implements CommandListener {
  private List mList;
  private Command mExitCommand, mNextCommand;
  public J2METravelList() {
    String[] stringElements = { "A""C""H" };
    Image[] imageElements = { loadImage("/a.png"), loadImage("/c.png"),
        loadImage("/h.png") };
    mList = new List("Reservation type", List.IMPLICIT, stringElements, imageElements);
    mNextCommand = new Command("Next", Command.SCREEN, 0);
    mExitCommand = new Command("Exit", Command.EXIT, 0);
    mList.addCommand(mNextCommand);
    mList.addCommand(mExitCommand);
    mList.setCommandListener(this);
  }
  public void startApp() {
    Display.getDisplay(this).setCurrent(mList);
  }
  public void commandAction(Command c, Displayable s) {
    if (c == mNextCommand || c == List.SELECT_COMMAND) {
      int index = mList.getSelectedIndex();
      Alert alert = new Alert("Your selection""You chose " + mList.getString(index) + ".", null,
          AlertType.INFO);
      Display.getDisplay(this).setCurrent(alert, mList);
    else if (c == mExitCommand)
      notifyDestroyed();
  }
  public void pauseApp() {
  }
  public void destroyApp(boolean unconditional) {
  }
  private Image loadImage(String name) {
    Image image = null;
    try {
      image = Image.createImage(name);
    catch (IOException ioe) {
      System.out.println(ioe);
    }
    return image;
  }
}
ChoiceGroup
            ChoiceGroup нь List-ийн нэгэн адил нэгэн төрлийн сонголтуудын жагсаалт юм.
            Байгуулагч функц нь
-               ChoiceGroup(String label, int type)
-               ChoiceGroup(String label, int type, String[] stringElements, Image[] imageElements) гэсэн хоёр төрөлтэй.
type нь ChoiceGroup-ийн төрөл бөгөөд ChoiceGroup.EXCLUSIVEChoiceGroup.MULTIPLE болон ChoiceGroup.POPUP гэсэн утгуудыг авна.
Дараах функцүүдтэй:
getSelectedIndex()getString(int elementNum)isSelected(int elementNum)
-       getSelectedIndex() – сонгогдсон элементийн дугаарыг буцаана.
getString(int elementNum) – elementNum дугаар бүхий элементийн текстийг буцаана.
-               isSelected(int elementNum) – elementNum дугаартай элемент идэвхтэй байгаа (сонгогдсон) эсэхийг тодорхойлно. Идэвхтэй байгаа бол true, эсрэг тохиолдолд false утга буцаана.

Жишээ 4ChoiceGruopMIDlet.java

public class ChoiceGroupMIDlet extends MIDlet {
  protected Display display;

  protected void startApp() {
    display = Display.getDisplay(this);

    Form form new Form("Demo");

    form.append("line");
        try {
          Image red = Image.createImage("/red.png");
          Image green = Image.createImage("/green.png");
          Image blue = Image.createImage("/blue.png");
    
          String[] strings = new String[] { "Red""Green""Blue" };
          Image[] images = new Image[] { red, green, blue };
          ChoiceGroup exGroup = new ChoiceGroup("Choose one", ChoiceGroup.EXCLUSIVE, strings, images);
          form.append(exGroup);
          ChoiceGroup multiGroup = new ChoiceGroup("Choose any", ChoiceGroup.MULTIPLE);
          form.append(multiGroup);
          multiGroup.append("Use SSL"null);
          multiGroup.append("Reconnect on failure"null);
          multiGroup.append("Enable tracing"null);
       catch (IOException ex) {
          form.append("Failed to load images");
       }


    display.setCurrent(form);
  }

  protected void pauseApp() {
  }

  protected void destroyApp(boolean unconditional) {
  }
} 

TextBox

            TextBox нь дэлгэцийн Form шиг энгийн төрөл бөгөөд гараас мөр оруулж, боловсруулалт хийх боломжтой.
            Байгуулагч функц нь
                        public TextBox(String title, String text, int maxSize, int constraints) хэлбэртэй. Үүнд:
-       title  TextBox-ийн гарчиг
-       text  анх програм ачаалагдахад TextBox дээр бичигдэх текст
-       maxSize  TextBox-д хамгийн ихдээ оруулж болох тэмдэгтийн тоо
-       constraints  Оруулах текстийн төрөл
·         ANY : ямар ч төрлийн оролтыг зөвшөөрнө
·         NUMERIC: бүхэл тоон төрлийг л зөвшөөрнө
·         DECIMAL: тоог зөвшөөрнө
·         PHONENUMBER: утасны дугаар
·         PASSWORD: оруулсан тэмдэгтүүд харагддаггүй, од(*)-оор дүрслэгдэнэ.
·         UNEDITABLE: анхны утгатай текстийг засах боломжгүй

Жишээ 5. TextBoxSizeMIDlet.java
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

public class TextBoxSizeMIDlet extends MIDlet {
  
  private Display display;

  public TextBoxSizeMIDlet() {
    display = Display.getDisplay(this);
  }

  public void startApp() {
    TextBox t = new TextBox("Hello MIDP""Welcome to MIDP Programming"2560);
    display.setCurrent(t);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

    }
}

ALERT-үүд

            Alert нь харилцах цонх юм. Тухайн үеийн маш чухал мэдээллийг дэлэгцэнд харуулахад хэрэглэхэд тохиромжтой.
            Байгуулагч функц нь
                        Alert(String title, String alertText, Image alertImage, AlertType alertType) гэсэн хэлбэртэй.
-       title: Alert-ийн гарчиг
-       alertText: Хэрэглэгчид яг юуны тухай сануулж, мэдээлж байгааг илэрхийлэх текст
-       image: Alert-д гаргах зураг
-       alertType: Alert-ийн төрөл бөгөөд Alert.ALARM, Alert.CONFIRGURATION, Alert.ERROR, Alert.INFO, Alert.WARNIING гэсэн 5 төрлийн утга авна.
            Alert-ийн дэлгэцэнд гарч байх хугацааг setTimeout(int time) функцээр тохируулна. Жишээлбэл, alert.setTimeout(5000) – дэлгэцэнд 5 секунд гаргах. Хэрэв alert.setTimeout(Alert.FOREVER) гэвэл Done товчийг дарах хүртэл дэлгэцэнд байсаар байна.

Жишээ 6. J2MEAlertMIDlet.java

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;

public class J2METwoAlerts extends MIDlet implements CommandListener {
  private Display mDisplay;

  private TextBox mTextBox= new TextBox("TwoAlerts"""32, TextField.ANY);

  private Alert mTimedAlert = new Alert("Network error""error occurred", null, AlertType.INFO);

  private Alert mModalAlert= new Alert("About TwoAlerts","Alerts.", null, AlertType.INFO);

  private Command mAboutCommand, mGoCommand, mExitCommand;

  public J2METwoAlerts() {
    mAboutCommand = new Command("About", Command.SCREEN, 1);
    mGoCommand = new Command("Go", Command.SCREEN, 1);
    mExitCommand = new Command("Exit", Command.EXIT, 2);

    mTextBox.addCommand(mAboutCommand);
    mTextBox.addCommand(mGoCommand);
    mTextBox.addCommand(mExitCommand);
    mTextBox.setCommandListener(this);

    mModalAlert.setTimeout(Alert.FOREVER);
  }

  public void startApp() {
    mDisplay = Display.getDisplay(this);

    mDisplay.setCurrent(mTextBox);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command c, Displayable s) {
    if (c == mAboutCommand)
      mDisplay.setCurrent(mModalAlert);
    else if (c == mGoCommand)
      mDisplay.setCurrent(mTimedAlert, mTextBox);
    else if (c == mExitCommand)
      notifyDestroyed();
  }
}
КОММАНДУУД

            Өмнөх сэдвүүдэд зөвхөн дэлгэцэнд ямар нэгэн мэдээлэл гаргах маш энгийн жишээнүүдтэй танилцлаа. Амьдралд ийм програм бараг байдаггүй. Ямар нэгэн мэдээлэл агуулсан, зөвхөн уг мэдээллийг хэрэглэгчид уншихад зориулагдсан тэмдэглэл маягийн програм байлаа гэхэд ядаж комманд өгч програмаас гардаг байх шаардлагатай юм. Үүнийг J2ME-д Command ангийн объектоор дамжуулан гүйцэтгэдэг.
            Байгуулагч функц нь
                        Command(String commandName, int commandType, int priority);
-       commandName: коммандын нэр
-       commandType: коммандын төрөл бөгөөд BACK, CANCEL, EXIT, HELP, ITEM, OK, SCREEN, STOP гэсэн утгууд авна.
-       priority: ижил төрөлтэй коммандуудыг ашиглахад тухайн коммандын байрлалыг заана.
            Form, TextBox эсвэл Canvas-т комманд оруулахдаа add(Command cmd) функцийг, оруулсан коммандыг зайлуулах бол removeCommand(Command cmd) функцийг тус тус ашиглана. Жишээлбэл,
Form form = new Form(“commandForm”);
                      Command cmd = new Command(“Ok”, Command.OK, 0);
                                     form.add(cmd);
Command ашигласан MIDlet-ийг дараах байдалтай үүсгэнэ:
public class className extends MIDlet implements CommandListener {
public void commandAction(Command cmd, Displayable dis) {
                        //Кодоо энд бичиж өгнө
}
}

Жишээ 7. J2MECommandGetter.java
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

public class J2MECommandGetter extends MIDlet implements CommandListener {

  private Command exitCommand = new Command("EXIT", Command.EXIT, 1);

  private Command infoCommand = new Command("info", Command.SCREEN, 1);

  TextBox t= new TextBox("Hello MIDP""Welcome to MIDP Programming"256,0);

  private Display display;

  public J2MECommandGetter() {
    display = Display.getDisplay(this);
  }

  public void startApp() {
    t.addCommand(exitCommand);
    t.addCommand(infoCommand);
    t.setCommandListener(this);
    display.setCurrent(t);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command c, Displayable s) {
    if (c == exitCommand) {
      notifyDestroyed();
    }
    if (c == infoCommand) {
      ((TextBox) s).setString(infoCommand.getLabel() + " " + infoCommand.getCommandType() + infoCommand.getPriority());
    }
  }
}
getLabel() функц нь коммандын нэрийг, getCommandType() нь коммандын төрлийг, getPriority() нь коммандын priority-ийг тус тус буцаадаг. Харин setLabel(String label), setCommandType(int commandType), setPriority(int priority) функцүүд нь коммандад харгалзан нэр, төрөл, priority олгодог.

            notifyDestroyed()- програмаас гарна

5 comments:

  1. ta tsaash ni togloomiin source tawij urgeljluulj bolohuu 2D ch ymuu 3D ch ymuu hamaagui ee

    ReplyDelete
  2. ta tsaash ni togloomiin source tawij urgeljluulj bolohuu 2D ch ymuu 3D ch ymuu hamaagui ee

    ReplyDelete
  3. Тун удалгүй тавьж өгөе. Хааяа сонирхол хөдлөхөөр хиймээр санагддаг нэг тоглоомын санаа байдаг юм л даа. Тэрийг хийх гэж оролдъё.

    ReplyDelete
  4. гар утасны үсэгний монгол үсгийн фонт хийх програм зохиох талаар санал байна уу? Өөрөөр хэлбэл би нэг програм зохиох гэхээр утасан дээр ө, ү үсэгүүд танигдахгүй байна. Үүнийг хэрхэн шийдэх бол

    ReplyDelete
  5. kursiin ajil hiij ogoch java deer

    ReplyDelete