這個Java程序如果你能寫出來,找不到工作來找我!
今天再給大家帶來一個重頭戲
詳細給大家講解一下如何用Java開發騰訊聊天程序
效果絕對震撼,可自行測試
正題:Java開發騰訊聊天程序(Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、Java代碼、)
流程:我打算從好多個點為大家仔細解析一下這個Java程序的開發思路和實現過程
1.Awt/Swing 包製作的聊天界面(全部用Java代碼實現)
一個java窗體的大致流程:窗體(Frame)――容器(Container)――(設置容器布局)――面板 (Panel)――(設置面板布局)――控制項
登陸界面Java代碼
import java.awt.*;
import javax.swing.*;
class wyMain extends JFrame {
JTextField tsend; //在外部聲明文本框,用來寫留言
JComboBox clist; //聲明下拉列表框,用來羅列在線用戶
JTextArea ta; //聲明大型文本區,用來顯示聊天記錄
wyMain(String title)
{
super(title); //訪問父類
JFrame 的構造函數,為窗體實現標題
this.setSize(400,300); //窗體為 400 寬,300 高
this.setLocation(150,250);
Container con=this.getContentPane();
con.setLayout(new BorderLayout()); //設置窗體布局為 BorderLayout
JPanel pp=new JPanel();
JPanel p1=new JPanel();
JPanel p2=new JPanel();
ta=new JTextArea(); //實例化大型文本區
ta.disable(); //設置只讀屬性
pp.setLayout(new GridLayout(2,1)); //把 pp 設成[2,1]格式的網格布局
pp.add(p1); //在(1,1)單元格放 p1
pp.add(p2); //在(2,1)單元格放 p2
con.add(p,BorderLayout.NORTH); // Container 把 pp 放在窗體北邊 con.add(ta,BorderLayout.CENTER);
//Container 把文本區放在中間部位,讓它能擁有足夠的空間
JLabel l1=new JLabel("留言:");
JLabel l2=new JLabel("To:");
tsend=new JTextField(30); //實例化文本框
clist=new JComboBox(); //實例化下拉列表框
JButton bSend=new JButton("Send");
p1.add(l1);
p1.add(tsend);
p2.add(l2);
p2.add(clist);
p2.add(bSend);
clist.addItem("所有人"); //下拉列表框添加一項內容
}
}
我們現在有了一個叫做「主界面」的 java類,我們給這個類加上主函數再運 行:
public static void main(String args[]){
wyMain wm=new wyMain(「聊天窗口」);
wm.show();
}
3.添加事件
我們的聊天程序現在已經有了界面了,但是我們必須想法子讓界面上的控制項能 夠實現它的具體功能,
不然的話界面再漂亮也是毫無意義的。於是我們需要為 窗體定義一些事件。
設立事件監聽器:拿上面的例子來說,人的皮膚就是負責監聽事件傳來消息的監聽器 。在java中,事件監聽器就是一個介面。 我們如果想讓窗體對一種事件做出響應,我們就必須為窗體植上「皮 膚」—— 設立監聽器。
為了登錄功能能夠實現,我們現在在 wyClient 中設立按鈕事件的監聽 器。(Java代碼)
監聽器弄好之後,聊天的界面基本就完成了
I/O 操作(聊天記錄)
我們在上個章節實現了程序的界面,包括像布局、事件、控制項、容器等不 可或缺的基本因素。這時我們會發現一個問題:不論如何在界面中發送信息, 關閉程序後再打開,所有的消息都會清空掉。因為這時我們的程序根本就是重 新創建的,原來的變數控制項都已經不存在了。 這時我們需要再寫一段代碼,把輸入過的留言都寫到一個文件中。在java中操作文件需要用到輸入流和輸出流。我們需要在程序中導入java.io.*工具 包。包中放的是一組流類。
這裡我們只簡單講解一下位元組輸入流(FileInputStream )和位元組輸出流 (FileOutputStream)。
字元輸入流(FileInputStream)
FileInputStream 類可以實例化,用於從磁碟文件讀取數據。我們可以 以下面幾種方式實例化該類:
(1)將文件名作為構造函數的參數,如: FileInputStream fs = new FileInputStream(「c:/temp.txt」);
(2)將File 類的對象作為構造函數的參數,如: File f = new File(「c:/temp.txt」); FileInputStream fs = new FileInputStream(f);
File 類是一個用來描述文件的文件名或者所在路徑的java 類。
字元輸出流(FileOutputStream)
我們把上面的代碼的功能加強一下,變成能夠擁有寫入功能的代碼。就叫字元輸出流(FileOutputStream)
用java.net包編程(用戶身份驗證和通訊)
現在我們的聊天程序有事件響應,可以登錄,可以留言,留言還可以被長 期保存起來。不過美中不足的是:
一、目前為止我們的用戶名和密碼驗證一直是在客戶端進行的。如果我們 的程序是 BS 結構的,那麼我們的驗證就不能放在客戶端上進行,那樣的話「BS 結構」會變得只是一句空話。
二、使用一個 CS 結構的聊天程序並不是在聊天,而是在自言自語,我們 需要通過途徑與網路中別的用戶取得聯繫。
要實現 BS 結構的理念,我們就得編寫一個能實現伺服器功能的程序。
java.net 包為網路化編程提供了功能強大的工具—— 一些基於套接字的客 戶端/伺服器端的類。(套接字是一種進程間的數據交換機制,這些進程既可以在同一機器上,也可 以通過網路連接的不同機器上。換句話說,套接字起到通信端點的作用。單個套 接字是一個端點,而一對套接字就構成了雙向通信的通道,使即使不在同一台機 器上的程序也可以通過網路進行數據交換,直到其中一個端點關閉連接。 套接字與主機地址和埠地址相關聯。主機地址是客戶端或伺服器程序所在 的主機的 IP 地址。埠地址是機器使用的通信埠。)的客 戶端/伺服器端的類。
到這裡,聊天程序的基本功能已經全部實現了,但是還有功能沒有被實現。比如多線程(處理多個用戶登陸)、JDBC(資料庫驗證)、集合(信息轉發)等等,但這些所用知識點太多。時間有限我也沒辦法把知識點和代碼一一列舉。只能見幾個比較重要的分享一下。大家需所有聊天程序功能實現的源代碼或者詳細步驟與知識點,
可以來我的Java新手群學習交流 一四四九零一零七六


※這些計算機網路知識應該作為程序員的入門基礎
※2017年最佳Web前端框架賞鑒
※前端初學者最容易忽略的CSS書寫規範和順序
※Java的「三生三世」
TAG:IT技術java交流 |
※我找不到工作,我踹了我媽
※我們來到蘇五口的工作室,斗膽問他印slogan是不是為了偷懶省事等尖銳問題,他說……
※愛情來與不來你都會錯過,工作拖不拖著你都得找
※如果你能做到「二做一走」,就無人敢你工作上找茬
※李白,你再牛也不能這樣寫簡歷呀!難怪找不到工作
※你對目前的工作不滿意,總也找不到一份合適的工作,可能是這裡出現了問題
※程序員這麼多,你還能找到工作嗎?
※婆婆給我做了這幾道菜,我連娘家都不想回了,也不想回去工作了!
※主人到家就工作,中途去了趟廁所,再回來時,喵:不摸我別想工作
※鏟屎的,雖然我很想你陪我,但是我不會妨礙你工作的
※「你都有孩子了還出來工作,老公一定很沒用吧」
※如果你能當好媽媽,還有什麼工作可以難倒你?
※總有一天你會遇到一個男朋友,不要你工作,不要你做飯,不要你做家務……
※你那份工作,你不做,別人也能做好。但你的孩子你不教,卻絕對沒有人能夠很好的代勞
※聽我一句勸吧,工作再難找,也別幹這一行
※這麼久還找不到工作,是因為你不夠優秀
※這份工作你也能做,為什麼要了別人不要你?
※我們來到蘇五口的工作室,斗膽問他印slogan是不是為了偷懶省事等尖銳問題,他說...
※如果有一天你有錢到不再需要為錢而工作了,你還會做現在正在做的事情嗎?
※留學後找不到好工作?你可能忽略了它……