lập trình ứng dụng minichat bằng java dùng cơ chế xử lý multithread

38
Lập trình ứng dụng MiniChat bằng Java dùng cơ chế xử lý Multithread TS. Nguyễn Văn Hiệp, Nguyễn Quang Hùng E-mail: [email protected] Website: www.dit.hcmut.edu.vn/~hungnq/courses.htm

Upload: obelia

Post on 08-Jan-2016

64 views

Category:

Documents


3 download

DESCRIPTION

Lập trình ứng dụng MiniChat bằng Java dùng cơ chế xử lý Multithread. TS. Nguyễn Văn Hiệp, Nguyễn Quang Hùng E-mail: [email protected] Website: www.dit.hcmut.edu.vn/~hungnq/courses.htm. Mục tiêu. Sử dụng cơ chế Java multithread. - PowerPoint PPT Presentation

TRANSCRIPT

Lập trình ứng dụng MiniChat bằng Java dùng cơ chế xử lý Multithread

TS. Nguyễn Văn Hiệp,

Nguyễn Quang HùngE-mail: [email protected]

Website: www.dit.hcmut.edu.vn/~hungnq/courses.htm

Faculty of Information Technology, HCM University of Technology

Mục tiêu

1. Sử dụng cơ chế Java multithread.

2. Bài tập ứng dụng MiniChat cho phép làm quen với qui trình xây dựng 1 chương trình theo giao diện “Dialog based” bằng JBuilder.

Faculty of Information Technology, HCM University of Technology

Mục lục

1. Giới thiệu c.trình MiniChat

2. Kỹ thuật lập trình Java Multi-thread

3. Xây dựng ứng dụng Minichat bằng JBuildera) Thiết kế giao diện cho MiniChat Client/Server

b) Thiết kế MiniChat server đáp ứng các kết nối đồng thời từ các client bằng cơ chế multithread

Faculty of Information Technology, HCM University of Technology

Giới thiệu về ctrình. MiniChat Chức năng: cho phép nhiều user đăng ký vào các nhóm để trò chuyện

với nhau. Mô hình lựa chọn: client/server Server: quản lý các nhóm và các user của từng nhóm, phân phối chuỗi

thông tin từ một user đến các user khác. Client: giao tiếp với các user; cho phép họ đăng ký nhóm; gởi/nhận

thông tin cho nhau. Định nghĩa giao thức dùng cho hệ thống MiniChat:

Lệnh GLIST <CRLF> Lệnh ULIST <CRLF> Lệnh LOGIN <tên group>,<tên user> <CRLF> Lệnh SEND <string> <CRLF> Lệnh LOGOU <CRLF>

Dạng reply cho tất cả các request: N <chuỗi dữ liệu phụ kèm theo> N = 1: Thành công, N = 0: Thất bại

Faculty of Information Technology, HCM University of Technology

Giao diện của ch.trình MiniChat clientCửa sổ nhập thông tin của button “Connect”

Cửa sổ nhập thông tin của button “login”

Faculty of Information Technology, HCM University of Technology

Giao diện của MS. Visual C++ IDE

Chạy Microsoft Visual C++từ Start Programs Microsoft Visual C++

Kỹ thuật lập trình Java Multithread

Tài liệu tham khảo:

java.sun.com

Faculty of Information Technology, HCM University of Technology

Kỹ thuật Java Multithread

Thread là một luồng thực thi trong một chương trình. Máy ảo JVM cho phép một ứng dụng có nhiều luồng thực thi đồng thời.

Có 2 cách dùng Java multithread (đa luồng): Khai báo một lớp kế thừa từ lớp Thread và

override method Thread.run(). Khai báo một lớp hiện thực interface Runnable

và method Runnable.run()

Faculty of Information Technology, HCM University of Technology

Cách 1: Kế thừa từ lớp Thread

1. class PrimeThread extends Thread {2. long minPrime;3. PrimeThread( long minPrime ) {4. this.minPrime = minPrime;5. }6. public void run( ) {7. // compute primes larger than minPrime8. . . .9. }10. }

11. PrimeThread p = new PrimeThread(143); 12. p.start();

Faculty of Information Technology, HCM University of Technology

Cách 2: Hiện thực giao diện Runnable1. class PrimeRun implements Runnable {2. long minPrime;3. PrimeRun ( long minPrime ) {4. this.minPrime = minPrime;5. }

6. public void run() {7. // compute primes larger than minPrime8. . . .9. }10. }

11. PrimeRun p = new PrimeRun(143); 12. new Thread(p).start();

Faculty of Information Technology, HCM University of Technology

Thread – Các constructor của lớp Thread Thread( ) - Allocates a new Thread object. Thread ( Runnable target) Thread (Runnable target, String name) Thread (String name) Thread (ThreadGroup group, Runnable target) Thread (ThreadGroup group, Runnable target, String name)

Tạo ra 1 thread mới, target là đối tượng có method run để chạy, tên được xác định bởi name, thuộc về 1 group.

Thread (ThreadGroup group, Runnable target, String name, long stackSize)

Giống trên nhưng có thêm kích thước stack của thread mới. Thread (ThreadGroup group, String name)

Faculty of Information Technology, HCM University of Technology

Thread – Các method khác

void start() void run() boolean isAlive() get/setName() static void sleep() setDaemon (boolean on); isDaemon() Các method join() …

Xây dựng ứng dụng MiniChat bằng JBuilder

Faculty of Information Technology, HCM University of Technology

Xây dựng ứng dụng MiniChat bằng JBuilder

Faculty of Information Technology, HCM University of Technology

Đóng các projects đang mở Chọn menu File.Close projects Chọn button “All” để đóng tất cả projects đang mở

Faculty of Information Technology, HCM University of Technology

Tạo project mới tên MiniChatClientChọn File.New projects

Faculty of Information Technology, HCM University of Technology

Project Wizard – Step 1 of 3Nhập tên Project, lựa chọn thư mục lưu project, chọn Template (nên để default project), rồi chọn Next

Faculty of Information Technology, HCM University of Technology

Project Wizard – Step 2 of 3Chọn JDK (1.4.1), chọn các đường dẫn lưu các lớp, c.trình nguồn, thư mục Working (nên để mặc định)

Faculty of Information Technology, HCM University of Technology

Project Wizard – Step 2 of 3Thêm các thư viện dùng kèm theo (nếu có) ở tab Required Libraries. Rồi chọn NEXT

Faculty of Information Technology, HCM University of Technology

Project Wizard – Step 3 of 3Xác định mã hóa (UTF-8), thêm các thông tin khác về tên dự án, mô tả… và chọn FINISH

Faculty of Information Technology, HCM University of Technology

Tạo 1 ứng dụng trong project MiniChatClient

Chọn menu File.New để mở Object Gallery. Chọn icon Application để tạo một ứng dụng mới trong project MiniChatClient

Faculty of Information Technology, HCM University of Technology

Application Wizard – Step 1 of 3Nhập tên ứng dụng, chọn package cho các class sẽ tạo ra, tên lớp Application mới này.

Faculty of Information Technology, HCM University of Technology

Application Wizard – Step 2 of 3Nhập tên class, tựa đề, chọn các mục tạo status bar, About dialog… Rồi chọn NEXT

Faculty of Information Technology, HCM University of Technology

Application Wizard – Step 3 of 3Nhập tên quản lý cấu hình run time (nên để mặc định). Rồi ấn nút FINISH để tạo ứng dụng MiniChatClient

Faculty of Information Technology, HCM University of Technology

Tạo ứng dụng c.trình MiniChatClient

Faculty of Information Technology, HCM University of Technology

Thiết kế giao diện Chọn tab Design để chuyển sang mode thiết kế giao diện bằng các control JComponents như JButton, JList, JPanel…

Faculty of Information Technology, HCM University of Technology

Thiết kế giao diện – Dùng XYLayoutChọn mục Content Pane, thay đổi thuộc tính Layout thành “XYLayout” để có thể thiết kế GUI dạng tự do dựa trên tọa độ trục X và Y.

Faculty of Information Technology, HCM University of Technology

Thiết kế giao diện – kéo các thành phầnChọn mục tab “SWING”, chọn icon “JButton” rồi vẽ nó ở góc trái trên form, chọn button vừa vẽ quan sát và gán giá trị cho thuộc tính “name=btnConnect”, “margin=1,1,1,1”, thuộc tính “text = Connect”

Faculty of Information Technology, HCM University of Technology

Thiết kế giao diện – tạo các nút

-Lập lại các bước trước để kéo thêm các nút: Groups, Login, Users, Send, Logout

Faculty of Information Technology, HCM University of Technology

Thiết kế giao diện – tạo danh sách nhóm

- Chọn tab “Swing Containers”, chọn icon “JScrollPane” rồi vẽ crollpane chứa listbox hiển thị danh sách nhóm, thiết lập field name = jspGroups

Faculty of Information Technology, HCM University of Technology

Thiết kế giao diện

-Lặp lại bước vừa rồi để tạo các danh sách jlbUsers, jlbContent.

- Vẽ một JTextField, và thiết lập field name = jtfMessage.

- Có thể canh trái, trên, phải… các thành phần.

Faculty of Information Technology, HCM University of Technology

Thiết kế giao diện – Hoàn tất

Faculty of Information Technology, HCM University of Technology

Tạo hàm nắm bắt các sự kiện

- Chọn nút Connect, chọn tab Events, đưa cursor về thuộc tính ActionPerformed, rồi ấn Enter để chọn hàm xử lý với tên mặc định

Faculty of Information Technology, HCM University of Technology

Tạo hàm nắm bắt các sự kiện (tiếp)

- Viết code cho hàm nắm bắt sự kiện ấn nút Connect.

- Lặp lại quá trình này cho các nút khác như Groups, Login, Users, Send, Logout.

Faculty of Information Technology, HCM University of Technology

Mô hình multi-thread ở client

Faculty of Information Technology, HCM University of Technology

Mô hình lập trình multi-thread ở server

Faculty of Information Technology, HCM University of Technology

Code phía Server // code của file MiniChatServerDlg package jbminichatclient; import java.awt.*; import java.awt.event.*; import javax.swing.*; import com.borland.jbcl.layout.*; import java.util.*; import java.net.*; import java.io.*; import java.sql.*;

Faculty of Information Technology, HCM University of Technology

Code phía Server (tiếp) public class MiniChatServerDlg extends JFrame implements

MessageListener { //các thuộc tính cần dùng cho Server int m_groupcnt; // số nhóm T_UserRec m_sock_no_user=null; // danh sách các user chưa

login T_GroupList m_grouplist[] = new T_GroupList[10]; // danh

sách nhóm String uname; // tên user ServerSocket serverSocket; // socket mà server dùng ₫ể accept final int SERVER_PORT = 256; // port lắng nghe của server //các thuộc tính cần dùng cho Server JPanel contentPane;