




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、java實訓(xùn)設(shè)計報告java實訓(xùn)設(shè)計報告電子信息工程學(xué)院專業(yè):軟件技術(shù)班級:1班 實訓(xùn):聊天室項目簡介項目名稱聊天室項目功能運用java程序編寫聊天室,實現(xiàn)簡單的聊天功能。它是圖形界面,線程,流與文件系統(tǒng)等技術(shù)的綜合應(yīng)用。其界面主要采用了java.awt包,java.swing包以及java.util包等。程序?qū)崿F(xiàn)了聊天室的基本功能,其中有:1、啟動服務(wù)器。2、進入客戶端界面。3、登錄聊天室。4、發(fā)送信息(實現(xiàn)按回車鍵發(fā)送消息)。5、關(guān)閉服務(wù)器項目目的1.能在程序中熟練應(yīng)用java 多線程技術(shù)2.熟悉java c/s 程序的結(jié)構(gòu)和工作原理3.能開發(fā)客戶端應(yīng)用程序4.會編寫服務(wù)器端多線程應(yīng)用程序
2、。5.熟悉java 數(shù)據(jù)庫連接方法,能在程序中讀寫數(shù)據(jù)庫主要技術(shù)java編程語言、javaswing組件開發(fā)環(huán)境jdk1.6.0_10項目特點使用組件構(gòu)建的c/s應(yīng)用程序各項功能的組織合理搭配應(yīng)用圖標(biāo)控制功能實現(xiàn)技術(shù)重點構(gòu)建基于c/s架構(gòu)的應(yīng)用程序swing組件應(yīng)用事件監(jiān)聽的應(yīng)用方法的編寫技術(shù)難點swing組件的應(yīng)用事件監(jiān)聽器的使用異常處理方法簡便的選擇系統(tǒng)總體設(shè)計1、設(shè)計思路聊天系統(tǒng)的設(shè)計跟普通網(wǎng)站設(shè)計有著許多不同的地方,普通網(wǎng)站設(shè)計所考慮的因素,例如,普通網(wǎng)站需要對布局進入大量美化以及動畫設(shè)計等等,而聊天室只要提供滿足訪客雙方直接實時聊天即可。因此,在設(shè)計聊天系統(tǒng)的過程中,必須要考慮好以下
3、幾個設(shè)計要點:在internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個面向連接的通信過程。因此,程序要在tcp/ip環(huán)境下,實現(xiàn)服務(wù)器端和客戶端兩部分程序。1首先通過繼承jframe類構(gòu)造服務(wù)器界面。2設(shè)計客戶端程序使其能夠完成正常的通信功能。3設(shè)計監(jiān)聽程序,使其顯示登錄的ip地址端口號,以及用戶昵稱,通過偵聽按鈕可以調(diào)用客戶端程序,實現(xiàn)聊天功能。2、各個模塊詳細的功能描述。1、服務(wù)器端功能描述:啟動服務(wù)器端。2、客戶端功能描述: 啟動客戶端;顯示登錄昵稱:顯示聊天記錄:發(fā)送信息;退出聊天室。系統(tǒng)詳細設(shè)計
4、1、界面設(shè)計主要由類chatroom來實現(xiàn),界面實際總體如下:輸入昵稱的文本框,輸入ip地址的文本框以及輸入端口的文本框;連接的按鈕;退出按鈕;接受消息的文本域;發(fā)送消息文本框;發(fā)送按鈕。項目設(shè)計在設(shè)計聊天室時,編寫3個java源文件:client.java、frame1.java、serverthread.java;分別放在兩個包中,一個是client,放client.java、frame1.java;一個是server,放serverthread.java;聊天室除了上述java源文件所給出的類外,還需要java系統(tǒng)提供的一些重要類,如jbutton,jtextfield等。下面是java
5、源文件的總體設(shè)計。client(主類)客戶端client類負責(zé)創(chuàng)建聊天室客戶端的主窗口,該類含有main方法,計算器從該類開始執(zhí)行。serverthread(主類)服務(wù)器 serverthread類負責(zé)創(chuàng)建聊天室服務(wù)器的主窗口,該類含有main方法,計算器從該類開始執(zhí)行。二詳細代碼設(shè)計聊天室程序設(shè)計詳細代碼如下:客戶端代碼:package client;import javax.swing.uimanager;public class client public client() frame1 frame=new frame1(); frame.setvisible(true); frame.
6、validate(); public static void main(string args) try uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname(); catch(exception e) e.printstacktrace(); new client(); package client;import java.awt.*;import java.awt.event.*;import javax.swing.*;import .*;import java.io.*;public class frame1
7、extends jframe implements runnable private jpanel contentpane; private textarea textarea1=new textarea(); private label label1=new label(); private jtextfield textfield1=new jtextfield(); private jbutton button1=new jbutton(); private jbutton button2=new jbutton(); private jbutton button3=new jbutto
8、n(); socket socket=null; bufferedreader in=null; printwriter out=null; jtextfield server=new jtextfield(); jlabel jlabel1=new jlabel(); jlabel jlabel2=new jlabel(); jtextfield port=new jtextfield(); jscrollpane jscrollpane1=new jscrollpane(); jlist jlist1=new jlist(); jlabel jlabel3=new jlabel(); de
9、faultlistmodel l1=new defaultlistmodel(); public frame1() try init(); catch(exception e) e.printstacktrace(); private void init() throws exception server.settext(inetaddress.getlocalhost().gethostaddress(); server.setbounds(new rectangle(69,252,74,22); contentpane=(jpanel)this.getcontentpane(); text
10、area1.seteditable(false); textarea1.setfont(new java.awt.font("dialog",font.plain,14); textarea1.setbounds(new rectangle(11,9,383,199); textarea1.setbackground(new color(66,00,233); textarea1.setforeground(new color(255,00,00); contentpane.setlayout(null); this.setsize(new dimension(506,31
11、4); this.settitle("客戶端"); label1.setfont(new java.awt.font("dialog",font.plain,12); label1.setforeground(new color(110,110,250); label1.settext("消息:"); label1.setbounds(new rectangle(26,213,32,27); button1.setactioncommand("發(fā)送"); button1.setbounds(new rectangl
12、e(334,216,62,23); button1.setenabled(false); button1.setfont(new java.awt.font("dialog",font.plain,12); button1.settext("發(fā)送"); button1.setforeground(new color(110,110,250); button1.addactionlistener(new java.awt.event.actionlistener() public void actionperformed(actionevent e) bu
13、tton1_actionperformed(e); ); button2.setbounds(new rectangle(266,251,58,24); button2.setfont(new java.awt.font("dialog",font.plain,12); button2.settext("連接"); button2.setforeground(new color(110,110,250); button2.addactionlistener(new java.awt.event.actionlistener() public void a
14、ctionperformed(actionevent e) button2_actionperformed(e); ); button3.setbounds(new rectangle(333,251,62,22); button3.setfont(new java.awt.font("dialog",font.plain,12); button3.settext("退出"); button3.setforeground(new color(110,110,250); button3.addactionlistener(new java.awt.even
15、t.actionlistener() public void actionperformed(actionevent e) button3_actionperformed(e); ); jlabel1.setfont(new java.awt.font("dialog",font.plain,12); jlabel1.settooltiptext(""); jlabel1.sethorizontalalignment(swingconstants.right); jlabel1.sethorizontaltextposition(swingconstan
16、ts.right); jlabel1.settext("服務(wù)器:"); jlabel1.setforeground(new color(110,110,250); jlabel1.setbounds(new rectangle(11,254,58,20); jlabel2.setfont(new java.awt.font("dialog",font.plain,12); jlabel2.settooltiptext(""); jlabel2.sethorizontalalignment(swingconstants.right);
17、jlabel2.sethorizontaltextposition(swingconstants.right); jlabel2.settext("端口:"); jlabel2.setforeground(new color(110,110,250); jlabel2.setbounds(new rectangle(172,253,27,18); port.settext("8000"); port.setbounds(new rectangle(202,251,40,22); jlist1.setfont(new java.awt.font("
18、;dialog",font.plain,12); jlabel3.setbounds(new rectangle(406,254,91,21); jlabel3.setforeground(new color(110,110,250); textfield1.setbounds(new rectangle(58,215,271,24); jscrollpane1.setbounds(new rectangle(404,14,94,226); jscrollpane1.getviewport().add(jlist1); contentpane.add(button3,null); c
19、ontentpane.add(button2,null); contentpane.add(button1,null); contentpane.add(server,null); contentpane.add(jlabel1,null); contentpane.add(textfield1,null); contentpane.add(textarea1,null); contentpane.add(jlabel2,null); contentpane.add(port,null); contentpane.add(label1,null); contentpane.add(jscrol
20、lpane1,null); contentpane.add(jlabel3,null); jlist1.setmodel(l1); void button1_actionperformed(actionevent e) out.println(jlabel3.gettext()+"對"+l1.getelementat(jlist1.getselectedindex()+"說:"+textfield1.gettext(); out.flush(); textfield1.settext(""); void button3_actionp
21、erformed(actionevent e) try out.println("大家盡情聊,再見!"); out.flush(); catch(exception e2) finally system.exit(0); void button2_actionperformed(actionevent e) thread thread=new thread(this); thread.start(); public void run() try socket=new socket(server.gettext(),integer.parseint(port.gettext(
22、); in=new bufferedreader(new inputstreamreader(socket.getinputstream(); out=new printwriter(socket.getoutputstream(); button1.setenabled(true); receiver r=new receiver(); thread t=new thread(r); t.start(); textarea1.append("歡迎加入聊天室n"); / button2.setenabled(false); catch(exception e) textar
23、ea1.append("連接失敗!請確認服務(wù)器地址并且服務(wù)器已啟動n"); private class receiver implements runnable public void run() string s1=null; try s1=in.readline(); while(s1!=null) if(s1.equals("clear users!") l1.removeallelements(); l1.addelement("大家"); jlist1.setselectedindex(0); else if(jlabel3
24、.gettext().equals("") jlabel3.settext(s1); else if(s1.length()<8&&!jlabel3.gettext().equals(s1) l1.addelement(s1); else if(!jlabel3.gettext().equals(s1) textarea1.append(s1+"n"); s1=in.readline(); in.close(); out.close(); socket.close(); catch(exception e) button1.sete
25、nabled(false); 服務(wù)器端代碼:package server;import .*;import java.io.*;public class serverthread implements runnableserversocket server=null;bufferedreader in=null;printwriter out=null;inetaddress myserver=null;object users=new object1000;static int usercount=0;public serverthread()tryinit();catch(exceptio
26、n e)e.printstacktrace();private void init() throws exceptionthread thread=new thread(this);thread.start();public void run()tryserver=new serversocket(8000);socket socket;while(true)socket=server.accept();if(socket!=null)usersusercount=socket;receiver r=new receiver(socket,usercount);thread t=new thr
27、ead(r);t.start();usercount+;catch(exception e)e.printstacktrace();private class receiver implements runnablesocket socket;int user;receiver(socket socket,int user)this.socket=socket;this.user=user;public void run()bufferedreader in=null;printwriter out=null;string s1=null;int userno;tryout=new print
28、writer(socket.getoutputstream();out.println("user"+user);out.flush();for(int j=0;j<usercount;j+)if(usersj=null)continue;out=new printwriter(socket)usersj).getoutputstream();out.println("clear users!");out.flush();for(int k=0;k<usercount;k+)out.println("user"+k);out.flush();in=new bufferedreader(new inputstreamreader(socket.getinputstream(); s1=in.readline(); while(!s1.equals("大家盡情聊,再見!") int te
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB32/T 3545.5-2023血液凈化治療技術(shù)管理第5部分:血液凈化醫(yī)療機構(gòu)應(yīng)急處置規(guī)程
- DB31/T 823-2014豬尿中賽庚啶殘留量的測定酶聯(lián)免疫吸附法與液相色譜-串聯(lián)質(zhì)譜法
- DB31/T 780-2014公交企業(yè)能源管理指南
- DB31/T 746-2014自動扶梯和自動人行道主要部件判廢技術(shù)要求
- DB31/T 562-2011工業(yè)園區(qū)物業(yè)管理服務(wù)規(guī)范
- DB31/T 1255-2020經(jīng)營者競爭合規(guī)指南
- DB31/T 1189.1-2019車載緊急報警系統(tǒng)第1部分:需求及總體架構(gòu)
- DB31/T 1186-2019特種設(shè)備風(fēng)險分級管控通則
- DB31/ 282-2013西甜瓜品種
- 2024年地質(zhì)勘察及探礦核儀器項目資金需求報告代可行性研究報告
- 病理信息系統(tǒng)技術(shù)方案
- DB37-T 1342-2021平原水庫工程設(shè)計規(guī)范
- 北京小升初分班考試數(shù)學(xué)試卷
- 2021年周施工進度計劃表
- 起重機械日常點檢表
- 說明書hid500系列變頻調(diào)速器使用說明書s1.1(1)
- 消化系統(tǒng)疾病護理題庫
- 金屬非金屬地下礦山六大系統(tǒng)簡介
- 建筑施工重大危險源的辨識及控制措施
- 光伏組件項目合作計劃書(范文)
- 常用扣型總結(jié)
評論
0/150
提交評論