Title: L?p tr
1L?p trình ?ng d?ng MiniChat b?ng Java dùng co ch?
x? lý Multithread
- TS. Nguy?n Van Hi?p,
- Nguy?n Quang Hùng
- E-mail hungnq2_at_dit.hcmut.edu.vn
- Website www.dit.hcmut.edu.vn/hungnq/courses.htm
2M?c tiêu
- S? d?ng co ch? Java multithread.
- Bài t?p ?ng d?ng MiniChat cho phép làm quen v?i
qui trình xây d?ng 1 chuong trình theo giao di?n
Dialog based b?ng JBuilder.
3M?c l?c
- Gi?i thi?u c.trình MiniChat
- K? thu?t l?p trình Java Multi-thread
- Xây d?ng ?ng d?ng Minichat b?ng JBuilder
- Thi?t k? giao di?n cho MiniChat Client/Server
- Thi?t k? MiniChat server dáp ?ng các k?t n?i d?ng
th?i t? các client b?ng co ch? multithread
4Gi?i thi?u v? ctrình. MiniChat
- Ch?c nang cho phép nhi?u user dang ký vào các
nhóm d? 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 d?n
các user khác. - Client giao ti?p v?i các user cho phép h? dang
ký nhóm g?i/nh?n thông tin cho nhau. - Ð?nh nghia giao th?c dùng cho h? th?ng MiniChat
- L?nh GLIST ltCRLFgt
- L?nh ULIST ltCRLFgt
- L?nh LOGIN lttên groupgt,lttên usergt ltCRLFgt
- L?nh SEND ltstringgt ltCRLFgt
- L?nh LOGOU ltCRLFgt
- D?ng reply cho t?t c? các request
- N ltchu?i d? li?u ph? kèm theogt
- N 1 Thành công, N 0 Th?t b?i
5Giao di?n c?a ch.trình MiniChat client
C?a s? nh?p thông tin c?a button Connect
C?a s? nh?p thông tin c?a button login
6Giao di?n c?a MS. Visual C IDE
Ch?y Microsoft Visual Ct? Start ? Programs ?
Microsoft Visual C
7K? thu?t l?p trình Java Multithread
- Tài li?u tham kh?o
- java.sun.com
8K? thu?t Java Multithread
- Thread là m?t lu?ng th?c thi trong m?t chuong
trình. Máy ?o JVM cho phép m?t ?ng d?ng có nhi?u
lu?ng th?c thi d?ng th?i. - Có 2 cách dùng Java multithread (da 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()
9Cách 1 K? th?a t? l?p Thread
- class PrimeThread extends Thread
- long minPrime
- PrimeThread( long minPrime )
- this.minPrime minPrime
-
- public void run( )
- // compute primes larger than minPrime
- . . .
-
-
- PrimeThread p new PrimeThread(143)
- p.start()
10Cách 2 Hi?n th?c giao di?n Runnable
- class PrimeRun implements Runnable
- long minPrime
- PrimeRun ( long minPrime )
- this.minPrime minPrime
-
- public void run()
- // compute primes larger than minPrime
- . . .
-
-
- PrimeRun p new PrimeRun(143)
- new Thread(p).start()
11Thread 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à d?i tu?ng có
method run d? ch?y, tên du?c xác d?nh b?i name,
thu?c v? 1 group. - Thread (ThreadGroup group, Runnable target,
String name, long stackSize) - Gi?ng trên nhung có thêm kích thu?c stack c?a
thread m?i. - Thread (ThreadGroup group, String name)
12Thread Các method khác
- void start()
- void run()
- boolean isAlive()
- get/setName()
- static void sleep()
- setDaemon (boolean on) isDaemon()
- Các method join()
13Xây d?ng ?ng d?ng MiniChat b?ng JBuilder
14Xây d?ng ?ng d?ng MiniChat b?ng JBuilder
15Ðóng các projects dang m?
- Ch?n menu File.Close projects
- Ch?n button All d? dóng t?t c? projects dang m?
16T?o project m?i tên MiniChatClient
Ch?n File.New projects
17Project Wizard Step 1 of 3
Nh?p tên Project, l?a ch?n thu m?c luu project,
ch?n Template (nên d? default project), r?i ch?n
Next
18Project Wizard Step 2 of 3
Ch?n JDK (1.4.1), ch?n các du?ng d?n luu các l?p,
c.trình ngu?n, thu m?c Working (nên d? m?c d?nh)
19Project Wizard Step 2 of 3
Thêm các thu vi?n dùng kèm theo (n?u có) ? tab
Required Libraries. R?i ch?n NEXT
20Project Wizard Step 3 of 3
Xác d?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
21T?o 1 ?ng d?ng trong project MiniChatClient
Ch?n menu File.New d? m? Object Gallery. Ch?n
icon Application d? t?o m?t ?ng d?ng m?i trong
project MiniChatClient
22Application Wizard Step 1 of 3
Nh?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.
23Application Wizard Step 2 of 3
Nh?p tên class, t?a d?, ch?n các m?c t?o status
bar, About dialog R?i ch?n NEXT
24Application Wizard Step 3 of 3
Nh?p tên qu?n lý c?u hình run time (nên d? m?c
d?nh). R?i ?n nút FINISH d? t?o ?ng d?ng
MiniChatClient
25T?o ?ng d?ng c.trình MiniChatClient
26Thi?t k? giao di?n
Ch?n tab Design d? chuy?n sang mode thi?t k? giao
di?n b?ng các control JComponents nhu JButton,
JList, JPanel
27Thi?t k? giao di?n Dùng XYLayout
Ch?n m?c Content Pane, thay d?i thu?c tính Layout
thành XYLayout d? có th? thi?t k? GUI d?ng t?
do d?a trên t?a d? tr?c X và Y.
28Thi?t k? giao di?n kéo các thành ph?n
Ch?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
namebtnConnect, margin1,1,1,1, thu?c tính
text Connect
29Thi?t k? giao di?n t?o các nút
- L?p l?i các bu?c tru?c d? kéo thêm các nút
Groups, Login, Users, Send, Logout
30Thi?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
31Thi?t k? giao di?n
- L?p l?i bu?c v?a r?i d? 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.
32Thi?t k? giao di?n Hoàn t?t
33T?o hàm n?m b?t các s? ki?n
- Ch?n nút Connect, ch?n tab Events, dua cursor
v? thu?c tính ActionPerformed, r?i ?n Enter d?
ch?n hàm x? lý v?i tên m?c d?nh
34T?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 nhu
Groups, Login, Users, Send, Logout.
35Mô hình multi-thread ? client
36Mô hình l?p trình multi-thread ? server
37Code 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.
38Code 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_usernull // danh sách các
user chua login - T_GroupList m_grouplist new T_GroupList10
// 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