1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình trên di động với j2me

129 290 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 129
Dung lượng 1,28 MB

Nội dung

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN LẬP TRÌNH TRÊN DI ĐỘNG VỚI J2ME GVHD: VÕ TÂM VÂN SVTH : TRẦN ĐỨC MINH 0112355 VŨ THỌ TUẤN 0112411 04/2005 Mục lục Trang Mục lục I Giới thiệu J2ME Lịch sử .5 a) b) Lý chọn J2ME .5 Java ban đầu thiết kế dành cho máy với tài nguyên nhớ hạn chế Thị trường J2ME mở rộng cho nhiều chủng loại thiết bị như: a) Kiến trúc J2ME Giới thiệu thành phần tảng J2ME: a) b) c) Giới thiệu MIDP .8 Định nghĩa: Những chức MIDP không thực được: Những chức MIDP cung cấp .9 Môi trường phát triển J2ME II Các thành phần giao diện mức cao ứng dụng MIDP 13 Đối tượng Display, Displayable Screens 13 a) b) c) d) e) f) g) Thành phần Form Items 14 DateField .14 Gauge 16 StringItem 17 TextField 18 ChoiceGroup 20 Spacer 22 Image and ImageItem 23 a) b) c) d) Thành phần List, Textbox, Alert, Ticker 25 List .25 TextBox .27 Alert AlertType .28 Ticker 30 III Các thành phần giao diện mức thấp ứng dụng MIDP 33 Các hàm API mức thấp .33 a) Lớp Canvas .33 Hệ thống trục tọa độ 33 b) c) d) e) f) g) h) Tạo đối tượng Canvas 34 Vẽ đối tượng Canvas 35 Sự kiện hành động .35 Mã phím .36 Các hành động xử lý trò chơi .36 Xác định hành động trò chơi 37 Sự kiện trỏ 40 a) b) c) d) e) f) g) h) i) Lớp Graphics 42 Hỗ trợ màu 42 Loại nét vẽ 43 Vẽ cung 43 Vẽ hình chữ nhật 46 Font chữ .46 Điểm neo .47 Vẽ chuỗi ký tự .48 Vẽ ảnh 54 Một số phương thức khác lớp Graphics 57 Các hàm API dùng để lập trình Game 58 IV Xử lý kiện 59 Đối tượng Command 59 Đối tượng Item 60 Ví dụ 60 V Record Management System 62 Persistent Storage Through the Record Store .62 a) b) c) Các vấn đề liên quan đến RMS .64 Hạn chế khả lưu trữ thiết bị di động 64 Tốc độ truy xuất liệu .64 Cơ chế luồng an toàn 64 Các hàm API RMS .64 Duyệt Record với RecordEnumeration 74 Sắp xếp record với interface RecordComparator 75 Searching with RecordFilter 91 Notification of Changes with RecordListener 103 Exception Handling 107 VI The Generic Connection Framework 108 Những protocol hỗ trợ GCF 108 a) b) Hỗ trợ giao thức HTTP MIDP 113 Request and response protocols 114 The HttpConnection API 116 Accessing a Java servlet .122 Phụ luc 127 Giới thiệu J2ME I Giới thiệu J2ME Lịch sử J2ME phát triển từ kiến trúc Java Card, Embeded Java Personal Java phiên Java 1.1 Đến đời Java Sun định thay Personal Java đươc gọi với tên Java Micro Edition, hay viết tắt J2ME Đúng với tên gọi, J2ME tảng cho thiết bị có tính chất nhỏ, gọn: Lý chọn J2ME a) Java ban đầu thiết kế dành cho máy với tài nguyên nhớ hạn chế b) Thị trường J2ME mở rộng cho nhiều chủng loại thiết bị như: • Các lọai thẻ cá nhân Java Card • Máy điện thoại di động • Máy PDA (Personal Digital Assistant - thiết bị trợ giúp cá nhân) • Các hộp điều khiển dành cho tivi, thiết bị giải trí gia dụng … Kiến trúc J2ME Phần trình bày kiến trúc tổng quát tảng Java Trang: Giới thiệu J2ME a) Giới thiệu thành phần tảng J2ME: Định nghĩa Configuration (Cấu hình): đặc tả định nghĩa môi trường phần mềm cho dòng thiết bị phân loại tập hợp đặc tính, ví dụ như: • Kiểu số lượng nhớ • Kiểu tốc độ vi xử lý • Kiểu mạng kết nối Do đặc tả nên nhà sản xuất thiết bị Samsung, Nokia …bắt buộc phải thực thi đầy đủ đặc tả Sun qui định để lập trình viên dựa vào môi trường lập trình quán thông qua quán này, ứng dụng tạo mang tính độc lập thiết bị cao Ví dụ lập trình viên viết chương trình game cho điện thoại Samsung sửa đổi chương trình cách tối thiểu để chạy điện thọai Nokia Hiện Sun đưa dạng Configuration: • CLDC (Connected Limited Device Configuration-Cấu hình thiết bị kết nối giới hạn): thiết kế để nhắm vào thị trường thiết bị cấp thấp (low-end), thiết bị thông thường máy điện thọai di động PDA với khoảng 512 KB nhớ Vì tài nguyên nhớ hạn chế nên CLDC gắn với Java không dây (Java Wireless ), dạng cho phép người sử dụng mua tải ứng dụng Java, ví dụ Midlet • CDC- Connected Device Configuration (Cấu hình thiết bị kết nối): CDC đưa nhắm đến thiết bị có tính mạnh dòng thiết bị thuộc CLDC yếu hệ thống máy để bàn sử dụng J2SE Những thiết bị có nhiều nhớ (thông thường 2Mb) có xử lý mạnh Các sản phẩm kể đến máy PDA cấp cao, điện thoại web, thiết bị gia dụng gia đình … Cả dạng Cấu hình kể chứa máy ảo Java (Java Virtual Machine) tập hợp lớp (class) Java để cung cấp môi trường cho ứng dụng J2ME Tuy nhiên, bạn ý thiết bị cấp thấp, hạn chế tài nguyên nhớ xử lý nên yêu cầu máy ảo hổ trợ tất tính với máy ảo J2SE, ví dụ, Trang: Giới thiệu J2ME thiết bị thuộc CLDC phần cứng yêu cầu phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không yêu cầu hỗ trợ kiểu float double Bảng so sánh thông số kỹ thuật CDC CLDC CLDC CDC Ram >=32K, =256K Rom >=128k, =512k Nguồn Năng Có GiớI Hạn (nguồn pin) Không giới hạn Lượng Network Chậm Nhanh Định nghĩa Profile: Profile mở rộng Configuration cách thêm vào class để bổ trợ tính cho thiết bị chuyên biệt Cả Configuration có profile liên quan từ profile dùng class lẫn Đến ta nhận thấy profile định nghĩa tập hợp class khác nhau, nên thường ta chuyển ứng dụng Java viết cho profile chạy máy hỗ trợ profile khác Cũng với lý đó, bạn lấy ứng dụng viết J2SE hay J2EE chạy máy hỗ trợ J2ME Sau profile tiêu biểu: • Mobile Information Device Profile (MIDP): profile bổ sung tính hỗ trợ kết nối, thành phần hỗ trợ giao diện người dùng … vào CLDC Profile thiết kế chủ yếu để nhắm vào điện thọai di động với đặc tính hình hiển thị hạn chế, dung lượng chứa có hạn Do MIDP cung cấp giao diện người dùng đơn giản tính mạng đơn giản dựa HTTP Có thể nói MIDP profile tiếng kiến thức cho lập trình Java máy di động (Wireless Java) Trang: Giới thiệu J2ME • PDA Profile: tương tự MIDP, với thị trường máy PDA với hình nhớ lớn • Foundation Profile: cho phép mở rộng tính CDC với phần lớn thư viện Core Java2 1.3 Ngoài có Personal Basis Profile, Personal Profile, RMI Profile, Game Profile Giới thiệu MIDP a) Định nghĩa: Đây Profile định nghĩa dành riêng cho thiết bị di động thành phần J2ME MIDP cung cấp chức cho hầu hết dòng thiêt bị di động phổ biến máy điện thoạI di động máy PDA Tuy nhiên MIDP đũa thần cho lập trình viên biết, MIDP thiết kế cho máy di động có cấu hình thấp Trong phần sau liệt kê qua tính mà MIDP cung cấp giới hạn • • • • • • • b) Những chức MIDP không thực được: Phép tính dấu phẩy động (floating point): Phép tính đòi hỏi nhiều tài nguyên CPU phần lớn CPU cho thiết bị di động không hỗ trợ phép tính này, MIDP Bộ nạp class (Class Loader) Hỗ trợ từ khóa finalize() J2SE: Việc “dọn dẹp“ tài nguyên trước bị xóa đẩy phía lập trình viên Không hỗ trợ JNI Hỗ trợ hạn chế thao tác bắt lỗi Phần lớn thư viện API cho Swing AWT sử dụng MIDP Không hỗ trợ tính quản lý file thư mục: Đây làm bạn ngạc nhiên thực tế thiết bị J2ME hỗ trợ thiết bị lưu trữ thông thường ổ cứng v.v Tuy nhiên, điều nghĩa bạn phải liệu quan trọng tắt máy, Sun cung cấp chức khác tương đương gọi Record Management system (RMS) để cung cấp khả lưu trữ cho thiết bị Trang: Giới thiệu J2ME • • • • • c) Những chức MIDP cung cấp Các lớp kiểu liệu: Phần lớn lớp mà lập trình viên Java quen thuộc giữ lại ví dụ lớp gói java.util Stack, Vector Hastable Enumeration Hỗ trợ đối tượng Display: Đúng tên gọi chương trình MIDP hỗ trợ đối tượng Display đối tượng quản lý việc hiển thị liệu hình điện thoại Hỗ trợ Form giao diện người dùng Hỗ trợ Timer Alert Cung cấp tính Record Management System (RMS) cho việc lưu trữ liệu Ngoài vào tháng 11 năm 2003 Sun tung MIDP 2.0 với hàng loạt tính khác cung cấp thêm so với 1.0 Những cải tiến bật so với MIDP 1.0 • Nâng cấp tính bảo mật o Download qua mạng an toàn qua việc hỗ trợ giao thức HTTPS o Kiểm soát việc kết nối máy di động server: ví dụ chương trình kết nối tới server thiếu chấp thuận người sử dụng • Thêm API hỗ trợ Multimedia Một cải tiến hấp dẫn MIDP 2.0 tập API media Các API tập hỗ trợ âm Mobile Media API (MMAPI) • Mở rộng tính Form Nhiều cải tiến đưa vào API javax.microedition.lcdui MIDP 2.0, thay đổi lớn (ngoài API cho game) Form Item • Hỗ trợ lập trình viên Game cách tung Game API: Có lẽ Sun kịp nhận thị trường đầy tiềm thiết bị di động lĩnh vực Game Với MIDP 1.0 lập trình viên phải tự viết code để quản lý hành động nhân vật quản lý đồ họa Việc làm tăng kích thước file sản phẩm việc xuất đoạn mã bị lỗi Được hưởng lợi từ Game API MIDP 2.0 không lập trình viên Game mà lập trình viên cần sử dụng tính đồ họa cao cấp Ý tưởng Game API việc giả định hình game tập hợp layer (lớp) Ví dụ như: game đua xe hình layer, đường layer xe xem nằm layer khác Với Game API nhà phát triển cung cấp tính quản lý thao tác bàn phím • Hỗ trợ kiểu ảnh RGB: cải tiến hấp dẫn cho nhà phát triển MIDP việc biểu diễn hình ảnh dạng mảng số nguyên, cho phép MIDlet thao tác với liệu hình ảnh cách trực tiếp Môi trường phát triển J2ME Có nhiều môi trường phát triển ứng dụng J2ME hãng điện thoại đưa môi trường phát triển cho riêng Ở giới thiệu toolkit Sun: J2ME Wireless Toolkit Địa download chương trình: http://java.sun.com/j2me/download.html Ngoài bạn cần phải có J2SDK 1.4 trở lên Trang: Giới thiệu J2ME Sau cài đặt bạn chạy chương trình tại: Giao diện chương trình: Sau hoàn thành các bước trên, lúc bắt đầu viết dòng code Bạn nhấp chuột vào nút bấm New Project nhập vào tên Project Class mà bạn muốn tạo, ví dụ TestMidlet Trang: 10 The Generic Connection Framework field thông qua phương thức setRequestProperty() Dưới ví dụ dùng setRequestProperty(), có liệu thay đổi sau ngày tháng năm 2005 gửi từ server: String url = "http://www.corej2me.com\somefile.txt"; HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET); // Set header field as key-value pair http.setRequestProperty("If-Modified-Since", "Sat, Jan 2005 12:00:00 GMT"); Body chứa nội dung mà bạn muốn gửi lên server Ví dụ sử dụng POST gửi liệu từ client thông qua stream: String url = "http://www.corej2me.com", tmp = "test data here"; OutputStream ostrm = null; HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.POST); // Send client body ostrm = http.openOutputStream(); byte bytes[] = tmp.getBytes(); for(int i = 0; i < bytes.length; i++) { os.write(bytes[i]); } os.flush(); Sau nhận sử lý yêu cầu từ phía client, server đóng gói gửi phía client Cũng client request, server gồm phần sau: • Status line • Header • Body Status line thông báo cho client kết request mà client gửi cho server HTTP phân loại status line thành nhóm sau đây: • 1xx is informational • 2xx is success • 3xx is redirection • 4xx is client error • 5xx is server error Status line bao gồm version HTTP server, status code, đoạn text đại diện cho status code Ví dụ: "HTTP/1.1 200 OK" "HTTP/1.1 400 Bad Request" "HTTP/1.1 500 Internal Server Error" Header Không giống header client, server gửi data thông qua header Sau phương thức dùng để lấy thông tin Header mà server gửi về: String getHeaderField(int n) Get header field value looking up by index String getHeaderField(String name) Get header field value looking up by name String getHeaderFieldKey(int n) Get header field key using index Trang: 115 The Generic Connection Framework Server trả nhiều Header field Trong trường hợp này, phương thức cho lấy header field thông qua index Còn phương thức thứ hai lấy nội dung header field dựa vào tên header field Còn muốn biết tên (key) header field, dùng phương thức thứ Sau ví dụ phương thức trên, trường hợp server gửi chuỗi "content-type=text/plain" Method Return value http.getHeaderField(0) "text-plain" http.getHeaderField("content"text-plain" type") http.getHeaderFieldKey(0) "content-type" Body: Cũng giống client, server gửi hầu hết thông tin phần body cho client Client dùng input stream để đọc kết trả từ server b) The HttpConnection API Như đề cập trên, ta sử dụng HttpConnection API để thiết lập kết nối MIDP Dưới API HttpConnection: Method long getDate() long getExpiration() String getFile() int getHeaderField(int n) String getHeaderField(String name) long getHeaderFieldDate(String name, long def) int getHeaderFieldInt(String name, int def) String getHeaderFieldKey(int n) String getHost() long getLastModified() String getPort() String getProtocol() String getQuery() String getRef() String getRequestMethod() String getRequestProperty(String key) int getResponseCode() Description Get header field date Gets header field expiration Gets filename from the URL Gets header field value looking up by index Gets header field value looking up by name Gets named field as a long (representing the date) Gets named field as an integer Gets header field key using index Gets host from the URL Gets last-modified field value Gets port from the URL Gets protocol from the URL Gets the query string (only valid with GET request) Gets the reference portion of URL Gets the current setting of the request method (GET, POST or HEAD) Gets the current setting of a request property Gets the response code (numeric value) Trang: 116 The Generic Connection Framework String getResponseMessage() String getURL() void setRequestMethod(String method) void setRequestProperty(String key, String value) Gets the response message (text value) Gets the entire URL Sets the request method (GET, POST or HEAD) Sets a request property (header information) Ví dụ: Chúng ta tạo MIDlet sử dụng HttpConnection để tải hiển thị nội dung file text Qua ví dụ bạn hiểu cách client gửi request lấy response server MIDlet sử dụng số phương thức HttpConnection để thu thập thông tin server: port, content type /* -* FileViewer.java * -*/ import javax.microedition.midlet.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import java.io.*; public class FileViewer extends MIDlet implements CommandListener { private Display display; private Form fmMain; private Command cmExit; private Command cmView; private String url = "http://localhost/text.txt"; public FileViewer() { display = Display.getDisplay(this); // Create exitcommand cmExit = new Command("Exit", Command.EXIT, 1); cmView = new Command("View", Command.SCREEN, 2); // Create the form and add commands fmMain = new Form("File Viewer"); fmMain.addCommand(cmExit); fmMain.addCommand(cmView); fmMain.setCommandListener(this); } public void startApp() { display.setCurrent(fmMain); } Trang: 117 The Generic Connection Framework /* -* Process events * -*/ public void commandAction(Command c, Displayable s) { // If the Command button pressed was "Exit" if (c == cmExit) { destroyApp(false); notifyDestroyed(); } else if (c == cmView) { // Download image and place on the form try { String str; if ((str = readFile()) != null) { // Delete form contents for (int i = fmMain.size(); i > 0; i ) fmMain.delete(0); // Append downloaded string fmMain.append("" + str); } } catch (Exception e) { System.err.println("Msg: " + e.toString()); } } } /* -* Read file * -*/ private String readFile() throws IOException { HttpConnection http = null; InputStream iStrm = null; String str = null; try { // Create the connection http = (HttpConnection) Connector.open(url); // -// Client Request Trang: 118 The Generic Connection Framework // -// 1) Send request method http.setRequestMethod(HttpConnection.GET); // 2) Send header information (this header is optional) http.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0"); // 3) Send body/data - No data for this request // -// Server Response // -System.out.println("url: " + url); System.out.println(" -"); // 1) Get status Line System.out.println("Msg: " + http.getResponseMessage()); System.out.println("Code: " + http.getResponseCode()); System.out.println(" -"); // 2) Get header information if (http.getResponseCode() == HttpConnection.HTTP_OK) { System.out.println("key 0: " + http.getHeaderFieldKey(0)); System.out.println("key : " + http.getHeaderFieldKey(1)); System.out.println("key 2: " + http.getHeaderFieldKey(2)); System.out.println(" -"); System.out.println("value (field) 0: " + http.getHeaderField(0)); System.out.println("value (field) 1: " + http.getHeaderField(1)); System.out.println("value (field) 2: " + http.getHeaderField(2)); System.out.println(" -"); // 3) Get data (show the file contents) iStrm = http.openInputStream(); int length = (int) http.getLength(); if (length != -1) { // Read data in one chunk byte serverData[] = new byte[length]; iStrm.read(serverData); str = new String(serverData); } else // Length not available { ByteArrayOutputStream bStrm = new ByteArrayOutputStream(); // Read data one character at a time int ch; while ((ch = iStrm.read()) != -1) Trang: 119 The Generic Connection Framework bStrm.write(ch); str = new String(bStrm.toByteArray()); bStrm.close(); } // // Show connection information // System.out.println("Host: " + http.getHost()); System.out.println("Port: " + http.getPort()); System.out.println("Type: " + http.getType()); } } finally { // Clean up if (iStrm != null) iStrm.close(); if (http != null) http.close(); } return str; } public void pauseApp() {} public void destroyApp(boolean unconditional) { } } Trang: 120 The Generic Connection Framework Output Console output Trang: 121 The Generic Connection Framework Accessing a Java servlet Ví dụ cho bạn bước cách truy truy xuất java servlet Bước đầu, client truyền tham số cho servlet yêu cầu trả ngày tháng theo định dạng Servlet trà kết quả, lên hình Đây kết cho chuỗi: “yyyy.MM.dd+'at'+hh:mm:ss+zzz" Trong hình trên, ta thấy phần kết có time zones ICT, ta truyền tham số “zzz”, chuyển thành “zzzz” để lấy full text time zones kết thay đổi sau: Trang: 122 The Generic Connection Framework Calling Servlet Yêu cầu gọi servlet đuợc khai báo bên commandAction(), thực button cmRqst kích hoạt: /* -* Call the servlet * -*/ public void commandAction(Command c, Displayable s) { if (c == cmRqst) { try { serverMsg = null; callServlet(); if (serverMsg != null) fmMain.append(serverMsg); } catch (Exception e) { System.err.println("Msg: " + e.toString()); } } else if (c == cmExit) { destroyApp(false); notifyDestroyed(); } } Dưới đoạn code cho phương thức callServlet(), ý request client sử dụng request method GET,: /* -* Call the servlet * -*/ private void callServlet() throws IOException { HttpConnection http = null; InputStream iStrm = null; boolean ret = false; // Examples - Data is passed at the end of url for GET String url = "http://localhost:8080/j2me/dateformatservlet?format=MMMM.dd.yyyy+''+hh:mm+aa"; // String url = "http://localhost:8080/j2me/dateformatservlet?format=yyyy.MM.dd+'at'+hh:mm:ss+zzz"; try { http = (HttpConnection) Connector.open(url); // Trang: 123 The Generic Connection Framework // Client Request // -// 1) Send request method http.setRequestMethod(HttpConnection.GET); // 2) Send header information - none // 3) Send body/data - data is at the end of URL // -// Server Response // -iStrm = http.openInputStream(); // Three steps are processed in this method call ret = processServerResponse(http, iStrm); } finally { // Clean up if (iStrm != null) iStrm.close(); if (http != null) http.close(); } // Process request failed, show alert if (ret == false) showAlert(errorMsg); } Code cho servlet, hầu hết phương thức biết doPost(), biến format dùng để lưu request từ client, sau servlet gọi SimpleDateFormat để tạo kết phù hợp với request: import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.Date; import java.text.SimpleDateFormat; import java.util.TimeZone; import java.util.Locale; public class DateFormatServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Trang: 124 The Generic Connection Framework { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String format = request.getParameter("format"); SimpleDateFormat simpleDate = new SimpleDateFormat(format); Date dt = new Date(); PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println(simpleDate.format(dt)); out.close(); } public String getServletInfo() { return "DateFormatServlet"; } } Để MIDlet nhận kết trả từ servlet, trước hết phải kiểm tra status line với server có kết trả kết hay không (HTTP_OK) Do thông tin header nên tiến hành lấy kết từ input stream: /* -* Process a response from a server * -*/ private boolean processServerResponse(HttpConnection http, InputStream iStrm) throws IOException { //Reset error message errorMsg = null; // 1) Get status Line if (http.getResponseCode() == HttpConnection.HTTP_OK) { // 2) Get header information - none // 3) Get body (data) int length = (int) http.getLength(); String str; if (length != -1) { byte servletData[] = new byte[length]; iStrm.read(servletData); str = new String(servletData); } Trang: 125 The Generic Connection Framework else // Length not available { ByteArrayOutputStream bStrm = new ByteArrayOutputStream(); int ch; while ((ch = iStrm.read()) != -1) bStrm.write(ch); str = new String(bStrm.toByteArray()); bStrm.close(); } // Save the server message serverMsg = str; return true; } else // Use message from the servlet errorMsg = new String( http.getResponseMessage()); return false; } Trang: 126 Phụ lục Phụ lục Bảng 1: Tổng số class interface CLDC Tên gói Miêu tả java.io Quản lý việc xuất nhập hệ thống java.lang Các lớp Java java.util Các lớp hỗ trợ việc tính thời gian, quản lý tập hợp v.v javax.microedition Quản lý kết nối Bảng 2: Các lớp bổ sung MIDP 1.0 Tên gói Miêu tả javax.microedition.rms Quản lý việc lưu trữ liệu javax.microedition.midlet Giao diện trung gian Midlet môi trường Midlet chạy javax.microedition.io Hỗ trợ HTTP javax.microedition.lcdui Hỗ trợ giao diện người dùng Bảng 3: Tổng số class interface CDC Tên gói Miêu tả java.io Quản lý việc xuất nhập hệ thống java.lang Các lớp Java java.lang.ref Các lớp hỗ trợ thu gom “rác” JVM java.lang.reflect Hỗ trợ tính reflection Java java.math Hỗ trợ phép tính toán học java.net Hỗ trợ mạng java.security Cung cấp tính bảo mật java.security.cert Hỗ trợ chứng thực bảo mật java.text Cung cấp lớp hỗ trợ thao tác text java.util Các lớp hỗ trợ việc tính thời gian, quản lý tập hợp v.v java.util.jar Hỗ trợ thao tác file Jar java.util.zip Hỗ trợ thao tác file Zip javax.microedition Quản lý kết nối Số lượng class interface 18 38 10 10 Số lượng class interface 10 24 Số lượng class interface 62 77 12 23 36 13 47 10 Trang: 127 Phụ lục Tham khảo: http://java.sun.com/j2me/ http://www.cs.armstrong.edu/burge/pdf/huc/01_J2ME_Overview.pdf http://www.onjava.com/pub/a/onjava/2001/03/08/J2ME.html http://developers.sun.com/techtopics/mobility/midp/articles/wtoolkit/ CLDC Specification (JSR-30) http://www.jcp.org/jsr/detail/30.jsp CLDC Next Generation (JSR-139) http://www.jcp.org/jsr/detail/139.jsp MIDP Specification (JSR-37) http://www.jcp.org/jsr/detail/37.jsp Mobile Information Device Next Generation (JSR-118) http://www.jcp.org/jsr/detail/132.jsp PDA Profile Specification (JSR-75) http://www.jcp.org/jsr/detail/75.jsp CDC Specification (JSR-36) http://www.jcp.org/jsr/detail/36.jsp Foundation Profile Specification (JSR-46) http://www.jcp.org/jsr/detail/46.jsp Personal Profile Specification (JSR-62) http://www.jcp.org/jsr/detail/62.jsp RMI Profile Specification (JSR-66) http://www.jcp.org/jsr/detail/66.jsp Java Game Profile (JSR-134) http://www.jcp.org/jsr/detail/134.jsp J2ME Multimedia API Specification (JSR-135) http://www.jcp.org/jsr/detail/135.jsp J2ME White Papers KVM http://java.sun.com/products/cldc/wp Applications for Mobile Devices http://java.sun.com/j2me/docs/pdf/midpwp.pdf J2ME Technologies J2ME http://java.sun.com/j2me CLDC and KVM http://java.sun.com/products/cldc MIDP http://java.sun.com/products/midp MIDP for Palm OS http://java.sun.com/ CDC and CVM http://java.sun.com/products/cdc Trang: 128 Phụ lục J2ME Development Kits J2ME Wireless Toolkit http://java.sun.com/products/j2mewtoolkit Metrowerks CodeWarrior for J2ME http://www.metrowerks.com/desktop/java Zucotto WHITEboard SDK http://www.zucotto.com/whiteboard/index.html RIM BlackBerry Java IDE http://developers.rim.net/tools/jde/index.shtml J2ME Developer Resources Java Developer Connection http://developer.java.sun.com/developer Java Wireless Developer Initiative http://java.sun.com/wireless Wireless Developer Network http://www.wirelessdevnet.com Micro Java Network http://www.microjava.com Java Mobile Community http://www.javamobile.org Java Enabled Phones and PDAs http://www.javamobiles.com KVM World http://www.kvmworld.com KVM-Interest Mailing List Archive http://archives.java.sun.com/kvm-interest.html XML Parsers for J2ME TinyXML Parser http://gibaradunn.srac.org/tiny NanoXML Parser http://nanoxml.sourceforge.net Trang: 129 [...]... ImageItem import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class ImageTest extends MIDlet implements CommandListener { private Display display; // Reference to Display object private Form fmMain; // The main form Trang: 23 Các thành phần giao di n ở mức cao private Command cmExit; // Command to exit the MIDlet public ImageTest() { display = Display.getDisplay(this); cmExit =... javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class TickerTest extends MIDlet implements CommandListener Trang: 30 Các thành phần giao di n ở mức cao { private Display display; // Reference to Display object private List lsProducts; // Products private Ticker tkSale; // Ticker private Command cmExit; // Command to exit the MIDlet public TickerTest() { display = Display.getDisplay(this);... một danh sách không tường minh import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class ImplicitList extends MIDlet implements CommandListener { private Display display; // Reference to Display object private List lsDocument; // Main list private Command cmExit; // Command to exit public ImplicitList() { display = Display.getDisplay(this); // Create the Commands cmExit = new... họa cho việc sử dụng TextBox: import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class TextBoxTest extends MIDlet implements CommandListener { private Display display; // Reference to Display object private TextBox tbClip; // Main textbox private Command cmExit; // Command to exit public TextBoxTest() { display = Display.getDisplay(this); // Create the Commands Notice the... import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class AlertTest extends MIDlet implements ItemStateListener, CommandListener { private Display display; // Reference to display object private Form fmMain; // Main form private Command cmExit; // Command to exit the MIDlet private ChoiceGroup cgSound; // Choice group public AlertTest() { display = Display.getDisplay(this); Trang:... Gauge import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class InteractiveGauge extends MIDlet implements CommandListener { private Display display; // Reference to display object private Form fmMain; // The main form private Command cmExit; // Exit the form private Gauge gaVolume; // Volume adjustment public InteractiveGauge() { display = Display.getDisplay(this); // Create... javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class StringItemTest extends MIDlet implements CommandListener { private Display display; // Reference to Display object private Form fmMain; // Main form private StringItem siMsg; // StringItem private Command cmChange; // Change the label and message private Command cmExit; // Exit the MIDlet public StringItemTest() { display = Display.getDisplay(this);... nào sẽ được hiển thị lên trên thiết bị Mặc dù chỉ có một đối tượng Display ứng với mỗi MIDlet, nhưng nhiều đối tượng trong một MIDlet có thể được hiển thị ra trên thiết bị như Forms, TextBoxes, ChoiceGroups, Một đối tượng Displayable là một thành phần được hiển thị trên một thiết bị MIDP chứa 2 lớp con của lớp Displayable là Screen và Canvas Hình dưới đây mô tả mối quan hệ trên Một đối tượng Screen... thành phần giao di n ở mức cao II Các thành phần giao di n ở mức cao của ứng dụng MIDP 1 Đối tượng Display, Displayable và Screens Một ứng dụng MIDlet chỉ có 1 đối tượng thể hiện Display Đối tượng này dùng để lấy thông tin về đối tượng trình bày, ví dụ màu được hỗ trợ, và bao gồm các phương thức để yêu cầu các đối tượng được trình bày Đối tượng Display cần thiết cho bộ quản lý việc trình bày trên thiết... exclusive-selection(chỉ được chọn một mục): nhóm này liên quan đến nhóm các radio button Dưới đây là đoạn mã minh họa cho việc sử dụng ChoiceGroup: import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class ChoiceGroupTest extends MIDlet implements ItemStateListener, CommandListener { private Display display; // Reference to display object private Form fmMain; // Main form private Command

Ngày đăng: 07/11/2016, 11:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w