Thứ Tư, 13 tháng 2, 2008

Chương 2 – Phân Tích Code J2ME

Sau khi đã tìm hiểu kiến trúc J2ME ở chương 1 chúng ta bắt đầu khảo sát “lập trình J2ME như thế nào” hay nói rõ hơn là code của 1 ứng dụng J2ME được viết như thế nào.

Chương trình J2ME có thể xem là một ứng dụng thu nhỏ của J2SE (ứng dụng Java chạy trên Desktop) nên cũng bao gồm các đối tượng như Form, TextBox, ListBox,…. Các đối tượng này có thể được thêm vào ứng dụng bằng code hay các công cụ thiết kế trực quan khác và chúng ta cần biết chúng sẽ được thêm vào hiện thực như thế nào?

Như một ứng dụng J2SE để hiện thị một câu chào chúng ta có thể cần 1 Form, 1 chuỗi chứa câu chào vào cho hiển thị lên Form. Ở J2ME cũng vậy, chúng ta cùng phân tích 1 đoạn code mẫu sau đây:

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class HelooJ2ME extends MIDlet implements CommandListener{

private Form mMainForm;

private Display display;

private Command cmdExit;

private StringItem str;

public HelooJ2ME() {

// TODO Auto-generated constructor stub

display = Display.getDisplay(this);

mMainForm = new Form("Chuong trinh so 2");

str = new StringItem(null,"Chao cac ban,MIDP");

cmdExit = new Command("Exit",Command.EXIT,0);

mMainForm.append(str);

mMainForm.addCommand(cmdExit);

mMainForm.setCommandListener(this);

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException

{

// TODO Auto-generated method stub

}

protected void pauseApp() {

// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {

// TODO Auto-generated method stub

display.setCurrent(mMainForm);

}

public void commandAction(Command c, Displayable s){

notifyDestroyed();

}

}

Các bạn có thể dùng bất kì công cụ lập trình J2ME nào để chép đoạn code trên vào chạy thử nhưng để tiện theo dõi mình sử dụng IDE eclipse (các bạn có thể xem thêm bài Dùng eclipse lập trình J2ME)

Các bạn mở eclipse, chọn File/New/Project…. Trong hộp thoại New Project chọn J2ME/ J2ME Midlet Suite. Chọn Next, nhập tên Project, chọn Finish. Vậy là chúng ta đã tạo xong một Project J2ME, nhưng project này chưa có file .java nào cả hay nói khác đi là một project trống rỗng.

Để tạo thêm các file .java các bạn chọn Project mới tạo sau đó chọn File/New/Other… (hoặc Right Click vào Project mới tạo chọn File/New/Other… ). Trong hộp thoại New các bạn chọn J2ME/J2ME Midlet, chọn Next, nhập tên Midlet (không cần giống tên project) sau đó chọn Finish. Các bạn lưu ý file .java sẽ được chứa trong thư mục src của Project tương ứng.

Các bạn copy toàn bộ đoạn code trên vào file .java. Để chạy thử chúng ra right click vào file .java này chọn Run As/Emulated J2ME Midlet. Nếu không có lỗi các bạn sẽ thấy hình một chiếc di động hiện ra với câu chào “Chao cac ban,MIDP"

Bây giờ chúng ta bắt đầu phân tích đoạn code trên. Như Chương Tìm hiểu kiến trúc J2ME mình đã giới thiệu, một ứng dụng J2ME có khung chương trình chuẩn như sau

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class HelooJ2ME extends MIDlet {

public HelooJ2ME() {

// TODO Auto-generated constructor stub

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException{

// TODO Auto-generated method stub

}

protected void pauseApp() {

// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {

// TODO Auto-generated method stub

}

}

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

include các lớp cần thiết từ các thư viện CLDC và MIDP.

public class HelooJ2ME extends MIDlet implements CommandListener{

Một ứng dụng J2ME là một lớp kế thừa từ MIDlet nên chúng ta sử dụng “extends MIDlet”, do trong chương trình chúng ta có một nút exit nên chúng ta cần tạo một bộ lắng nghe sự kiện CommandListener mục đích là đón bắt sự kiện người dùng nhấn nút exit.

Các bạn lưu ý trong J2ME có 2 giao diện Listener chính cho mỗi MID Profile là: CommandListener và ItemStateListener mục đích là lắng nghe các sự kiện do người dùng tác động vào ứng dụng như bấm nút, nhập chữ vào textbox, thay đổi lựa chọn trên listbox,….. Phần này mình sẽ trình bày kĩ hơn ở chương sau “Giao diện người dùng cấp cao”

private Form mMainForm;

private Display display;

private Command cmdExit;

private StringItem str;

tạo một Form để hiển thị, đối tượng Display (chúng ta có thể xem Display là một bộ quản lý điều khiển và hiển thị các thông tin trên màn hình), Command để người dùng chọn Exit và StringItem chứa câu chào.

public HelooJ2ME() {

// TODO Auto-generated constructor stub

display = Display.getDisplay(this);

mMainForm = new Form("Chuong trinh so 2");

str = new StringItem(null,"Chao cac ban,MIDP");

cmdExit = new Command("Exit",Command.EXIT,0);

mMainForm.append(str);

mMainForm.addCommand(cmdExit);

mMainForm.setCommandListener(this);

}

Ở phương thức khởi dụng này chúng ta thấy, đầu tiên chúng ta lấy Display hiện thời gán cho biến display, tạo một Form mới với tiêu đề là ("Chuong trinh so 2"), tạo một câu chào và một nút nhấn Exit. Phần chi tiết tạo các thành phần trên mình sẽ trình bày ở chương “Giao diện người dùng cấp cao”

Sau đó chúng ta gắn thành phần str lên form bằng lệnh append() và nút exit bằng lệnh addCommand(), tạo bộ lắng nghe sự kiện cho nút exit bằng lệnh setCommandListener(this).

protected void startApp() throws MIDletStateChangeException {

// TODO Auto-generated method stub

display.setCurrent(mMainForm);

}

Phương thức startApp() đơn giản là đưa lên form đã gắn các thành phần kia lên màn hình bằng lệnh setCurrent().

public void commandAction(Command c, Displayable s){

notifyDestroyed();

}

Do chúng ta sử dụng giao diện CommandListener nên nhất thiết phải cài đặt phương thức

commandAction(Command c, Displayable s). Chúng ta có thể hiểu rằng khi một nút được nhấn lậpo tức phương thức commandAction(Command c, Displayable s) được gọi và các lệnh trong phương thức này sẽ được thực thi, ở đây đơn giản là thoát khỏi ứng dụng. Nếu chúng ta có nhiều nút nhấn thì cần sử dụng câu lênh if ví dụ:

if (c==cmdExit)

notifyDestroyed();

else if (c==cmdHelp)

display.setCurrent(txtHelp);

else if (c==cmdBack)

display.setCurrent(mainForm);

Tổng kết:

Đến đây chúng ta có thể hình dùng chương trình sẽ chạy như sau:

B1 : đầu tiên phương thức khởi tạo sẽ được gọi và các đối tựợng cần thiết sẽ được tạo

B2: phương thức startApp() được gọi và hiện lên Form ra màn hình

B3: không làm gì cả đến khi người dùng nhấn nút exit, thực hiện phương thức commandAction(Command c, Displayable s)

Đến đây chúng ta đã hình dung được một ứng dụng J2ME sẽ được thực hiện như thế nào ở chương sau chúng ta sẽ khảo sát các đối tượng như TexBox, ListBox,… còn khung chương trình thì vẫn như trên, giả sử để tạo thêm một TextBox các bạn chỉ cần bổ sung thêm vào phương thức khởi tạo sau đó gắn nó vào Form còn phần hiển thị ra màn hình thì vẫn như cũ.


0 nhận xét: