Profile › Đặc tả cần thiết cho một họ thiết bị J2ME Profile J2ME Libraries Java Virtual Machine... Lớp kế thừa là lớp chính của ứng dụng Lớp MIDlet định nghĩa c
Trang 2 J2ME là gì?
Các khái niệm chính của J2ME
MIDlet, MIDlet Suite
Các lớp API cơ bản
Cài đặt và sử dụng bộ Toolkit
Lập trình J2ME trên Eclipse
Trang 3Java gồm có 3 phiên bản.
Mỗi phiên bản cung cấp một mội
trường hoàn chỉnh cho việc chạy các ứng dụng Java, bao gồm:
› Máy ảo Java (JVM – Java Virtual Machine)
› Các lớp thời gian chạy.
3 phiên bản này nhằm tới các ứng
dụng khác nhau chạy trên các loại thiết bị khác nhau
Trang 4Java2
Standard Edition
(J2SE™)
Java2 Enterprise Edition
(J2EE™)
Java2 Micro Edition (J2ME™) Java 2 Platform
Standard desktop &
workstation applications Heavy duty serversystems constrained devicesSmall & memory
Trang 5Mỗi phiên bản định nghĩa tập các thư viện lớp khác nhau
Có đến hàng ngàn lớp thời gian chạy J2SE chính, khoảng 10-20 MB
J2ME- có số lớp ít hơn
J2ME J2SE J2EE
Trang 6 Configuration
› Yêu cầu nền tối
thiểu cho một nhóm thiết bị.
Profile
› Đặc tả cần thiết
cho một họ thiết bị
J2ME Profile
J2ME Libraries
Java Virtual Machine
Trang 7Configurations
Profiles
Optional packages
Trang 8 Configuration là một môi trường
thời gian chạy Java hoàn chỉnh, bao gồm:
› Java virtual machine (VM): thực thi Java
bytecode
› Mã tự nhiên để giao tiếp với hệ thống cơ sơ
› Tập các lớp thời gian chạy Java chính.
Để sử dụng một configuration, một thiết bị phải đạt được các yêu cầu tối thiểu
Trang 9CLDC CDC
Connected Limited Device
Configuration Connected Device Configuration
Trang 10lượng thấp (dùng
pin)
thông giới hạn
hoặc hơn đối với nền(flatform) Java
› Bộ xử lý: 32-bit
thông mạng cao, thường sử dụng TCP/IP
Trang 11KVM – máy ảo Java dành cho cấu hình CLDC
CVM - máy ảo Java dành cho cấu hình CDC
Trang 12 CLDC bao gồm các
lớp từ:
› java.lang
› java.io
› java.util
Chỉ bao gồm các
lớp được chọn từ
mỗi package
CDC bao gồm 17 package
Bao gồm cả các lớp trong package chia se
Trang 13CDC CLDC J2SE
Trang 14 Configurations
Optional packages
Trang 15Thêm các lớp đặc tả miền cho một
configuration:
› Để hỗ trợ sử dụng đặc tả của một thiết bị
Hầu hết các profiles định nghĩa các lớp giao diện người dùng cho việc xây dựng các ứng dụng tích hợp
Để sử dụng profile, thiết bị phải đáp ứng yêu cầu tối thiểu của
configuration và profile cơ sở
Trang 16n Profile
Personal Basis Profile
Personal Profile
Trang 17MIDP là profile dành cho các MID -
Mobile Information Device
Đặc trưng tối thiểu của MID:
› Đủ bộ nhớ để chạy các ứng dụng MIDP
› Độ phân giải tối thiểu 96 X 56 pixels, màu hoặc trắng đen
› Bộ phím: keypad, keyboard, hoặc touch screen
› Khả năng mạng không dây 2 chiều
Trang 18Có 2 phiên bản MIDP:
MIDP 1.0 – 9/2000: Nhiều thiết bị trên thì trường hiện tại hỗ trợ
MIDP 2.0 – 11/2003: Nhiều cải
tiến vượt bậc so với MIP 1.0
› Nâng cấp tính năng bảo mật: HTTPS, kết
nối tới server
› Thêm các API hỗ trợ Multimedia
› Mơ rộng các tính năng của Form
› Hỗ trợ Game API
› Hỗ trợ kiểu ành RGB
Trang 19Configurations
Profiles
Trang 20 Tập các API hỗ trợ thêm
Độc lập với một cấu hình và một hoặc nhiều profile
Các optional package:
› Bluetooth
Trang 21Ứng dụng J2ME là một dạng không rõ ràng (ambiguous term)
Nên chọn cụ thể Configuration,
profile và các optional package
Các CDC-based profile giúp phát
triển đơn giản hơn J2SE, nhưng không phù hợp với các low-end device
Các CLDC-based profile khó hơn cho việc phát triển, đặc biệt là cố gắng hạn chế kích thước ứng dụng để chạy trên nhiều thiết thị nho
Trang 22 Phần quan trọng nhất của J2ME
MIDP không dùng phương thức static
main, cũng không gọi phương thức System.exit để thoát ứng dụng
Thay vậy, chúng ta sử dụng MIDlet, một ứng dụng MID Profile
Trang 23Mỗi ứng dụng phải kế thừa lớp
javax.microedition.midlet.MIDlet để
cho phép phần mềm quản lý ứng dụng:
› Quản lý MIDlet
› Có thể lấy các đặc trưng từ bộ mô tả ứng dụng
› Thông bào và yêu cầu các thay đổi trạng thái
Trang 24 Lớp kế thừa là lớp chính của ứng dụng
Lớp MIDlet định nghĩa các phương thức trừu tượng mà lớp chính thực thi như: startApp(), destroyApp(), notifyDestroyed()
Trang 25Một hay nhiều MIDlet được đóng gói
vào một MIDlet suite, bao gồm:
› JAR (Java archive) file
› JAD (Java Application Descriptor) file
Tất cả các lớp người dùng định
nghĩa và tài nguyên được cần thiết cho MIDlet Suite nằm trong file JAR
Trang 26 File JAR cũng phải chứa file
manifest mô tả các MIDlet trong
Suite
File JAD chứa thông tin tương tự, và được sử dụng bởi thiết bị đế lấy thông tin vềmột MIDlet Suite mà
không phải download và cài đặt
MIDlet Suite
Trang 28Khai báo các gói đặc tả
MIDP
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
Trang 29Thực thi giao diện CommandListener
public class HelloMIDlet
extends MIDlet
implements CommandListener {
Trang 30
Tạo form, thêm các Command
Trang 32 MIDlet – Lớp cơ sở
Trang 33protected abstract void startApp()
protected abstract void pauseApp()
protected abstract void
Trang 35Form là màn hình chứa các thành
phần như: image, text field, date field, gauge, choice group, và
Trang 36 Quản lý Item
› public int append(Item item)
› public Item get(int itemNum)
Layout
public void
setItemStateListener(ItemStateListe
ner iListener)
Trang 38 Lớp Command biểu diễn mặc ngữ nghĩa của một hành động
Hành động được thực thi trong đối
tượng CommandListener
CommandListener được kết hợp với
một Displayable hoặc Item
Một khi Command được gọi –
CommandListener được gọi, và hành động đucợ thực thi
Trang 40 Đối tượng này là bộ lắng nghe các Command được đưc vào một
Displayable
public void
commandAction(Command c,
Displayable d)
Trang 41Khi một Command (được đưa vào một Item) được gọi, ứng dụng được thông báo có commandAction() được gọi
trong ItemCommandListener
public void
commandAction(Command c, Item item)
Trang 43Lớp cha của các thành phần có thể được thêm vào Form
Tất cả các đối tượng Item có một trường label
Layout, size, và appearance
Thêm vào các Command
Trang 44 public void notifyStateChanged()
public int getPreferredWidth()
Trang 45› Bước 1: Download sun ’s J2ME Wireless Toolkit từ:
http://java.sun.com/products/j2mewtool kit/download-2_1.html
› Bước 2: Kiểm tra J2SE SDK đã được cài đặt
› Bước 3: Cài đặt J2ME Toolkit
Trang 46 Shortcut trên menu Start:
chương trình:
Trang 48 Chọn “File\New Project”
Nhập tên project và lớp MIDlet
Một thư mục mới chứa project sẽ tự động được tạo
Trang 49files.
ZIP) for a specific project
J2ME/apps/lib external class libraries, (JAR or ZIP) for all KToolbar projects.
Trang 51sử dụng các công cụ cần thiết
dụng J2ME
Java IDE từ Eclipse.
Trang 52 Bước 1: Download tại địa chi
› Eclipse: http://www.eclipse.org
› EclipseME:
http://www.sourceforge.net/projects/eclipseme
Bước 2: Kiểm tra yêu cầu
› Để chạy được EclipseME, cần phải có J2ME
Wireless Toolkit (WTK) 1.0, JDK 1.4 và Eclipse 3.0M9 trơ lên.
Bước 3: Cài đặt EclipseMe
› Để cài đặt EclipseMe, chỉ cần giải nén file zip đến thư mục plugins của Eclipse
Trang 53Bước 4:
› Menu Window -> Preferences Mơ rộng
mục J2ME, chọn mục Platform
Components.
› Trong khung bên phải, kích chuột phải vào
mục Wireless Toolkits, kích vào Add
Wireless Toolkit.
› Cửa sổ hiện ra yêu cầu bạn chọn thư mục cài
đặt WTK Nhấn nút Browse và chọn thư mục
WTK đã cài đặt.
› Nhất Finish rồi nhấn OK Quá trình cài đặt
và cấu hình đã hoàn tất.
Trang 55 Mở rộng mục J2ME, chọn J2ME MIDlet Suite Nhấn Next.
Gõ tên project (ví dụ HelloWorld) và chọn thư mục chứa project (ví dụ
C:\projects\J2ME) Nhấn Next.
Chọn nền WTK Nhấn Next.
Có thể thêm các thư viện cần dùng, thêm thư mục chứa source v.v… Cũng có thể để mọi thứ theo mặc định.
Nhấn Finish để kết thúc quá trình tạo J2ME project
Trang 56 Trong khung Navigator, kích chuột
phải trên J2ME project (theo ví dụ ở trên là HelloWorld).
Trang 57chương trình hiển thị
một màn hình intro
trong 30 giây với một
hình ảnh dạng png
làm logo.
Trang 58g.setColor(0xFF0000); Font font =
Font.getFont(Font.FACE_SYSTE
M, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
g.setFont(font);
int x = (getWidth() - font.stringWidth(hello)) / 2; int y = (getHeight() - font.getHeight()) / 2;
g.drawString(hello, x, y, Graphics.TOP | Graphics.LEFT); }
}
Trang 59public class IntroCanvas extends Canvas{
private static final String logoName =
"/Images/image.png";
private Display display;
private Displayable nextScreen;
private int timeout;
private Timer timer = new Timer();
display, Displayable nextScreen, int timeout){ this.display = display;
this.nextScreen = nextScreen;
this.timeout = timeout; }
public void startIntro(){
display.setCurrent(this); }
public void endIntro(){
display.setCurrent(nextScr een);
}
Trang 60protected void paint(Graphics
protected void keyPressed(int keyCode) { endIntro();}
private class CountDown extends TimerTask { public void run()
{endIntro();}
}
Trang 61private Display display;
private IntroCanvas introCanvas;
private HelloCanvas helloCanvas;
public HelloWorldMIDlet() {
super();
}
MIDletStateChangeException { display =
Display.getDisplay(this);
helloCanvas = new HelloCanvas();
introCanvas = new IntroCanvas (display,
helloCanvas, 3000);
introCanvas.startIntro(); }
protected void pauseApp() { }
protected void destroyApp(boolean arg0) throws
MIDletStateChangeException {}
}