Java聊天室程序設(shè)計報告_第1頁
Java聊天室程序設(shè)計報告_第2頁
Java聊天室程序設(shè)計報告_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余8頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Java之聊天室制作總結(jié)報告姓名_趙其國學(xué)號_2班 級嵌入式一班二o二年十二月二十日一,設(shè)計目的為了更好的鞏固輸入輸出流,窗體設(shè)計,多線程運(yùn)用,網(wǎng)絡(luò)通信設(shè)計方面的知識。把所學(xué)的課程及相關(guān)知識加 以融會貫通。二,設(shè)計內(nèi)容設(shè)計的聊天室能實(shí)現(xiàn)用戶登錄,顯示登錄用戶列表,以及發(fā)送聊天信息和顯示聊天信息的功能。并可以選擇接收信息的用戶進(jìn)行單發(fā)或群發(fā)的功能,運(yùn)行程序,登錄服務(wù)器后,可以從列表中選 擇單個或多個用戶進(jìn)行聊天,它是圖形界面,線程,流和文件系統(tǒng)等技術(shù)的綜合使用。三,概要設(shè)計實(shí)現(xiàn)的功能:1,啟動服務(wù)器端,接收客戶端發(fā)來的信息,并在服務(wù)器端窗體顯示客戶端聊天信息,再吧信息返給在線用戶, 窗體背景色為

2、粉色2,啟動客戶端窗體,窗體背景色為粉色3,用戶名編輯框輸入用戶名,設(shè)置字體顯紅色,單擊登錄按鈕,在顯示在線用戶列表內(nèi)顯示用戶名,同時用戶名編輯框不能編輯4,發(fā)送編輯框輸入發(fā)送內(nèi)容,單擊發(fā)送按鈕,啟動輸出流,把信息發(fā)送出去,同時把發(fā)出的信息追加到聊天 內(nèi)容文本域內(nèi),顯示用戶名,時間和發(fā)送內(nèi)容。5,單擊退出按鈕,運(yùn)用 File類和JfileChooser類實(shí)現(xiàn)聊天信息的保存6,聊天信息文本域,在線用戶顯示域和發(fā)送信息的文本域加了滾動條,其中聊天信息文本域,發(fā)送信息的文 本域的文字能自動換行。7 別的客戶端發(fā)來信息是通過輸入流讀取信息,并截取發(fā)來信息的用戶名及信息,用戶名加到在線用戶列表 上顯示在

3、線,信息追加到聊天內(nèi)容文本域內(nèi),顯示用戶名,時間和發(fā)送內(nèi)容。功能不足之處:1,保存聊天信息保存為text格式的有黑塊。保存為 Doc格式的要轉(zhuǎn)碼不能直接打開2,用戶在線顯示,只能在用戶發(fā)送信息時別的用戶才能得到在線的用戶名,然后再加到在線用戶列表中,顯 示用戶在線。3,聊天室只適合群聊,沒有實(shí)現(xiàn)技能群聊又能和單個人聊天的功能4,用戶輸出“退出”后在線用戶列表中就會把用戶刪除,不過沒有實(shí)現(xiàn)沒找到錯誤出在哪里。四,演示截圖客戶端1用戶界面(可在冋一個類中打開多個窗客戶端2用戶界面:體)tn戶e輅入幫止巴孑服務(wù)器端用戶界面體中文格式)':“蘭自五等待內(nèi)白徉IT 同利3Ei£接 等待

4、再向在接“ 対己謹(jǐn)攝 哥詩円白這擡 54M5HSS 卑詁冉口卿" 曲汕嬉尸為: 54?0Ah£: 汎3龍左戶端; 鬢強(qiáng)雀戶箱; 54卻4宮戶?畫: :,$和涓戶j豈円流BS:4S:23private JLabel user name, in put客戶端1代碼(客戶端2,3.代碼同下)SuppressWarni ngs("all")public class Clie nt1 exte nds JFrame 用doc格式保存的聊天信息(打開時轉(zhuǎn)碼為簡設(shè)計源代碼(導(dǎo)入的代碼省略)可可說*大新 矣笑識:可口饒.:嶺唁B C 蘭笑諾.:椰在辱pjo aOL212

5、15陽尢 30L2-12-1P 的舸”筈第 30L2-lS Hrllai-可可 3012-n-is Drn-陽光 2012 12-13 部在鄲尖莫 20L2 12 12Sttt 亠3償卻ii、卜5!1hS11C1JFS 引 fllprivate JButton denglu, exit, send; private JTextArea n ame, msg, sayprivate JTextField jtl;private JSplitPa ne split;boolea n log inF lag = false;private Socket socket;private Outputst

6、ream op;private JList user_list; 列表private DefaultComboBoxModel model;/ 組件模型public Client1() super();setTitle(” 聊天室”);user name = new JLabel("用戶名:”);in put = new JLabel("輸入聊天內(nèi)容:”);denglu = new JButton("登陸");exit = new JButton("退出");send = new JButton("發(fā)送");msg

7、 = new JTextArea(10, 25);msg.setEnabled(false);/ 文本條不可編輯Font fnt1 = new Fon t("Serief", Font.P LAIN, 20);/根據(jù)名稱、樣式和磅值大小設(shè)置字體msg.setF on t(fnt1);msg.setLi neWrap(true);/ 自動換行jt1 = new JTextField(15);jt1.setForegro un d(Color.red);say = new JTextArea(2, 15);say.setL in eWrap(true);n ame = new

8、JTextArea(10, 5);n ame.setE nabled(false);user_list = new JList();user_list.setModel(new DefaultComboBoxModel(new String "");model = (DefaultComboBoxModel) user_list.getModel();/獲得列表框的模型public void clie ntThread() try socket = new Socket("localhost", 8866);/ 創(chuàng)建接口op = socket.getOu

9、tputStream(); 創(chuàng)建輸出流new ClientThread(msg, socket, model, jt1).start();/ 啟動線程 catch (UnknownH ostExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace(); catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();/發(fā)送事件public void sen d() 聊天記錄.doc");/聊天信息保存位置if (!lo

10、gi nF lag) / 先登錄JOptionPane.showMessageDialog(null,"請先登錄?!?; return;Stri ng sen dUserName = jt1.getText();Stri ng info = say.getText();if (info.equals("") / 信息為空就提示JOptionPane.showMessageDialog(null,"請輸入發(fā)送信息! !"); return;try String username = jt1.getText() + "說:”;初始化傳遞發(fā)

11、送信息的標(biāo)記 op.write(username + info).getBytes(); 倉U建輸出流 catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();DateFormat df = DateFormat.getDateInstance(); 獲得 DateFormat 實(shí)例 String dateString = df.format(new Date();/ 格式化日期 df = DateFormat.getTimeI nsta nce(DateFormat.MEDIUM);Strin

12、g timeString = df.format(new Date();/ 格式化時間msg.append("" + sendUserName + "" + dateString + "" + timeString+ "n" + " " + info + "n"); 追加發(fā)送的信息try FileWriter fw = new FileWriter(f, true);/ 文件輸出流 fw.write(msg.getText().toString();/ 向文件內(nèi)寫入信息 fw

13、.close(); catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();say.setText("");public void in it() setLayout(new BorderLayout(); 窗體布局JPa nel up = new JPa nel();up.setBackground(ColorPINK);/ 背景色 up.add(user name);up.add(jt1);up.add(de nglu);up.add(exit);/添加滾動條JScrol

14、lPa ne scr = new JScrollPa ne(say);JScrollPa ne js1 = new JScrollPa ne(user_list);JScrollPa ne js = new JScrollPa ne(msg);/ JSplitPane用于分隔兩個(只能兩個)Componentsplit = new JSplitPa ne(JSplitPa ne.HORIZONTAL_SPLIT, true, js1, js);split.setDividerLocation(100); 分割位置JPa nel dow n = new JPa nel();down.setBac

15、kground(ColorPINK);/ 設(shè)置背景色dow n. add(i nput);dow n. add(scr);dow n. add(se nd);add(up, BorderLayout.NORTH);add(split, BorderLayout.CENTER);add(dow n, BorderLayout.SOUTH);den glu.addAct ion Liste ner(new Action Liste ner() Overridepublic void action Performed(Act ionEvent e) / TODO Auto-ge nerated me

16、thod stubif (logi nFlag) /已登錄標(biāo)記為 trueJOptionPane.showMessageDialog(nuII,"在同一窗口只能登錄一次。");return;jt1.setE nabled(false);log inF lag = true;model.addEleme nt(jt1.getText(););sen d.addAct ion Liste ner(new Acti on Liste ner() Overridepublic void action Performed(Act ionEvent e) / TODO Auto-ge

17、nerated method stubsen d(););exit.addActi on Liste ner(new Actio nListe ner() public void action Performed(fi nal ActionEvent e) JFileChooser chooser = new JFileChooser();/ 創(chuàng)建文件選擇器FileNameExte nsionF ilter filter = new FileNameExte nsionF ilter("jpg", "gif', "txt", "

18、;mdl", "doc");/設(shè)置文件格式chooser.setFileFilter(filter);/ 設(shè)置當(dāng)前文件過濾器 int returnVal = chooser.showSaveDialog( null);if (returnVal = JFileChooser.APPROVE OPTION) System.out.pri ntln ("You chose to Save this file:"+ chooser.getSelectedFile().getName();try op.close();socket.close(); c

19、atch (IOException e1) / TODO Auto-ge nerated catch blocke1.pri ntStackTrace();System.exit(O););public void showMe() ini t();/ pack();setSize(500, 500);/窗體大小 setResizable(false);/ 不可改變大小 setLocation(200, 200);/ 位置 setVisible(true);/ 顯示 setDefaultCloseOperati on (JFrame.EXIT_ON_CLOSE);public static vo

20、id main(String args) Clie nt1 l = new Clie nt1();l.showMe();l.clie ntThread();客戶端線程部分ClientThread類:SuppressWarnings("all")public classClientThread extends Threadprivate JTextArea msg;private Socket socket;DefaultComboBoxModel model;private JTextField jt1;public Clie ntThreadJTextArea msg,

21、Socket socket,DefaultComboBoxModel model,JTextField jt1) this.msg = msg;this.socket = socket;this.model=model;this.jt1 =jt1;Overridepublic void run() while (true)try In putStream is= socket.getl nputStream(); 倉 U建輸入流byte b= new byte1024;int n=is.read(b); 獲得字節(jié)數(shù)String s= new String(b,0,n); /接收到的信息Stri

22、ng username=jt1.getText()+ "說:"if(!s.startsWith(username) /只接受別人發(fā)來的信息String sendname=s.substring(0,s.indexOf(”說:");/獲得用戶名String receive=s.substring(s.indexOf("說:")+2);/獲得信息 if (s.startsWith("sendname 說:退出") 是否退出 model.removeElement(sendname); / 從用戶歹U表中移除用戶 else boo

23、lean itemFlag = false; /標(biāo)記是否為列表框添加列表 項,為true不添加,為false添加for (int i = 0; i < model.getSize(); i+) if (se ndn ame.equals(Stri ng) model .getEleme ntAt(i) /如果用戶列表中存在該用戶名itemFlag = true; /設(shè)置為true,表示不添加到用 戶歹y表break;if (!itemFlag) model.addElement(sendname); / 將登錄用戶添加 到用戶列表DateFormat df = DateFormat. g

24、etDateInstance(); / 獲得 DateFormatString dateString = df.format( new Date(); 格式化日期df = DateFormat. getTimeInstance(DateFormat. MEDIUM );String timeString= df.format( new Date(); /格式化時間msg. appe nd(”"+se ndn ame+""+dateStri ng+" "+timeStri ng+ "n"+""+receiv

25、e+ "n ”);/ 追加信息 catch (IOException e) / TODO Auto-generated catch blocke.pri ntStackTrace();月服務(wù)器端 ServerAreaText類:SuppressWarnings("all")public classServerAreaText extends JFrame private JTextArea jta;private JScrollPa ne jsp;private Socket socket;private static ArrayList<Socket>

26、; al = new ArrayList<Socket>(); /套接字列表 public ServerAreaText() jta = new JTextArea(20, 40);jta.setEditable( false);jta.setLineWrap( true);jsp = new JScrollPa ne(jta);/get set方法,屬于類變量public static ArrayList<Socket> getAl() return al;public static void setAl(ArrayList<Socket> al) Ser

27、verAreaText. al = al;public void init() setTitle("聊天室服務(wù)器端");this.add(jsp);public void EventHandle() try ServerSocket server = new ServerSocket(8866); 創(chuàng)建接口 while (true) jta.append(”等待用戶連接"+ "n");socket = server.accept();/ 連接al.add(socket);jta.append(socket.getPort() + "已

28、連接"+ "n");new ServerThread1(jta, socket).start();/ 啟動線程 catch (Exceptio n e) e.pri ntStackTrace();public void showMe() in it();pack();setResizable(false);this.setLocatio n(150, 150);this.setVisible( true);this.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); Even tHa ndle();public static void main(String args) / TODO Auto-generated method stub new ServerAreaText().showMe();服務(wù)器端線程部分ServerThread1 類:SuppressWarnings("all")public cla

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論