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

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

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

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.

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

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

Page 4: Lập trình ứng dụng MiniChat bằng Java dùng cơ chế xử lý 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

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

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”

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

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++

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

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

Tài liệu tham khảo:

java.sun.com

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

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()

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

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();

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

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();

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

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)

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

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() …

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

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

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

Faculty of Information Technology, HCM University of Technology

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

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

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ở

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

Faculty of Information Technology, HCM University of Technology

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

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

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

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

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)

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

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

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

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

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

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

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

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.

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

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

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

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

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

Faculty of Information Technology, HCM University of Technology

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

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

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…

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

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.

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

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”

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

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

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

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

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

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.

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

Faculty of Information Technology, HCM University of Technology

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

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

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

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

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.

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

Faculty of Information Technology, HCM University of Technology

Mô hình multi-thread ở client

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

Faculty of Information Technology, HCM University of Technology

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

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

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.*;

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

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;


Recommended