版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《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、進(jìn)入客戶端界面。3、登錄聊天室。4、發(fā)送信息<實現(xiàn)按回車鍵發(fā)送信息)。5、封閉服務(wù)器1.能在程序中嫻熟應(yīng)用Java多線程技術(shù)2.熟習(xí)JavaC/S程序的結(jié)構(gòu)和工作原理3.能開發(fā)客戶端應(yīng)用程序4.會編寫服務(wù)器端多線程應(yīng)用程序。項目目的熟習(xí)Java數(shù)據(jù)庫連結(jié)方法,5.能在程序中讀寫數(shù)據(jù)庫Java編程語言、javaSwing組件主要技術(shù)開發(fā)環(huán)境使用組件建立的C/S應(yīng)用程序項目各項功能的組織合理搭配應(yīng)用特點圖標(biāo)控制功能實現(xiàn)建立鑒于C/S架構(gòu)的應(yīng)用程序技Swing組件應(yīng)用術(shù)重事件監(jiān)聽的應(yīng)用點方法的編寫Swing組件的應(yīng)用技事件監(jiān)聽器的使用術(shù)難異樣辦理點方法簡易的選擇系統(tǒng)整體設(shè)計1、設(shè)計思路聊天系統(tǒng)的設(shè)計跟一般網(wǎng)站設(shè)計有著很多不一樣的地方,一般網(wǎng)站設(shè)計所考慮的要素,比如,一般網(wǎng)站需要對布局進(jìn)入大批美化以及動畫設(shè)計等等,而聊天室只需供給知足訪客兩方直接及時聊天即可。所以,在設(shè)計聊天系統(tǒng)的過程中,一定要考慮好以下幾個設(shè)計重點:在Internet上的聊天程序一般都是以服務(wù)器供給服務(wù)端連結(jié)響應(yīng),使用者經(jīng)過客戶端程序登錄到服務(wù)器,就能夠與登錄在同一服務(wù)器上的用戶談話,這是一個面向連結(jié)的通訊過程。所以,程序要在TCP/IP環(huán)境下,實現(xiàn)服務(wù)器端和客戶端兩部分程序。1.第一經(jīng)過繼承JFrame類結(jié)構(gòu)服務(wù)器界面。2.設(shè)計客戶端程序使其能夠達(dá)成正常的通訊功能。3.設(shè)計監(jiān)聽程序,使其顯示登錄的ip地點端口號,以及用戶昵稱,經(jīng)過偵聽按鈕能夠調(diào)用客戶端程序,實現(xiàn)聊天功能。2、各個模塊詳盡的功能描繪。1、服務(wù)器端功能描繪:啟動服務(wù)器端。2、客戶端功能描繪:啟動客戶端;顯示登錄昵稱:顯示聊天記錄:發(fā)送信息;退出聊天室。系統(tǒng)詳盡設(shè)計1、界面設(shè)計主要由類ChatRoom來實現(xiàn),界面實質(zhì)整體以下:輸入昵稱的文本框,輸入IP地點的文本框以及輸入端口的文本框;連結(jié)的按鈕;退出按鈕;接受信息的文本域;發(fā)送信息文本框;發(fā)送按鈕。項目設(shè)計2/15在設(shè)計聊天室時,編寫3個Java源文件:Client.java、Frame1.java、ServerThread.java;分別放在兩個包中,一個是client,放Client.java、Frame1.java;一個是server,放ServerThread.java;聊天室除了上述Java源文件所給出的類外,還需要Java系統(tǒng)供給的一些重要類,如JButton,JTextField等。下邊是Java源文件的整體設(shè)計。Client<主類)客戶端Client類負(fù)責(zé)創(chuàng)立聊天室客戶端的主窗口,該類含有main方法,計算器從該類開始履行。ServerThread<主類)服務(wù)器ServerThread類負(fù)責(zé)創(chuàng)立聊天室服務(wù)器的主窗口,該類含有main方法,計算器從該類開始履行。二詳盡代碼設(shè)計聊天室程序設(shè)計詳盡代碼以下:客戶端代碼:packageclient。。publicclassClient{publicClient(>{Frame1frame=newFrame1(>。frame.setVisible(true>。frame.validate(>。}publicstaticvoidmain(String[]args>{try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(>>。}catch(Exceptione>{e.printStackTrace(>。}newClient(>。}}packageclient。importjava.awt.*。importjava.awt.event.*。importjavax.swing.*。.*。3/15importjava.io.*。publicclassFrame1extendsJFrameimplementsRunnable{privateJPanelcontentPane。privateTextAreatextArea1=newTextArea(>。privateLabellabel1=newLabel(>。privateJTextFieldtextField1=newJTextField(>。privateJButtonbutton1=newJButton(>。privateJButtonbutton2=newJButton(>。privateJButtonbutton3=newJButton(>。Socketsocket=null。BufferedReaderin=null。PrintWriterout=null。JTextFieldserver=newJTextField(>。JLabeljLabel1=newJLabel(>。JLabeljLabel2=newJLabel(>。JTextFieldport=newJTextField(>。JScrollPanejScrollPane1=newJScrollPane(>。JListjList1=newJList(>。JLabeljLabel3=newJLabel(>。DefaultListModell1=newDefaultListModel(>。publicFrame1(>{try{init(>。}catch(Exceptione>{e.printStackTrace(>。}}privatevoidinit(>throwsException{server.setText(InetAddress.getLocalHost(>.getHostAddress(>>。server.setBounds(newRectangle(69,252,74,22>>。4/15contentPane=(JPanel>this.getContentPane(>。textArea1.setEditable(false>。textArea1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,14>>。textArea1.setBounds(newRectangle(11,9,383,199>>。textArea1.setBackground(newColor(66,00,233>>。textArea1.setForeground(newColor(255,00,00>>。contentPane.setLayout(null>。this.setSize(newDimension(506,314>>。this.setTitle("客戶端">。label1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12>>。label1.setForeground(newColor(110,110,250>>。label1.setText("信息:">。label1.setBounds(newRectangle(26,213,32,27>>。button1.setActionCommand("發(fā)送">。button1.setBounds(newRectangle(334,216,62,23>>。button1.setEnabled(false>。button1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12>>。button1.setText("發(fā)送">。button1.setForeground(newColor(110,110,250>>。button1.addActionListener(newjava.awt.event.ActionListener(>{publicvoidactionPerformed(ActionEvente>{button1_actionPerformed(e>。}}>。button2.setBounds(newRectangle(266,251,58,24>>。button2.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12>>。button2.setText("連結(jié)">。button2.setForeground(newColor(110,110,250>>。button2.addActionListener(newjava.awt.event.ActionListener(>{publicvoidactionPerformed(ActionEvente>{5/15button2_actionPerformed(e>。}}>。button3.setBounds(newRectangle(333,251,62,22>>。button3.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12>>。button3.setText("退出">。button3.setForeground(newColor(110,110,250>>。button3.addActionListener(newjava.awt.event.ActionListener(>{publicvoidactionPerformed(ActionEvente>{button3_actionPerformed(e>。}}>。jLabel1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12>>。jLabel1.setToolTipText("">。jLabel1.setHorizontalAlignment(SwingConstants.RIGHT>。jLabel1.setHorizontalTextPosition(SwingConstants.RIGHT>。jLabel1.setText("服務(wù)器:">。jLabel1.setForeground(newColor(110,110,250>>。jLabel1.setBounds(newRectangle(11,254,58,20>>。jLabel2.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12>>。jLabel2.setToolTipText("">。jLabel2.setHorizontalAlignment(SwingConstants.RIGHT>。jLabel2.setHorizontalTextPosition(SwingConstants.RIGHT>。jLabel2.setText("端口:">。jLabel2.setForeground(newColor(110,110,250>>。jLabel2.setBounds(newRectangle(172,253,27,18>>。port.setText("8000">。port.setBounds(newRectangle(202,251,40,22>>。jList1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12>>。jLabel3.setBounds(newRectangle(406,254,91,21>>。6/15jLabel3.setForeground(newColor(110,110,250>>。textField1.setBounds(newRectangle(58,215,271,24>>。jScrollPane1.setBounds(newRectangle(404,14,94,226>>。jScrollPane1.getViewport(>.add(jList1>。contentPane.add(button3,null>。contentPane.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(jScrollPane1,null>。contentPane.add(jLabel3,null>。jList1.setModel(l1>。}voidbutton1_actionPerformed(ActionEvente>{out.println(jLabel3.getText(>+"對"+l1.getElementAt(jList1.getSelectedIndex(>>+"說:"+textField1.getText(>>。out.flush(>。textField1.setText("">。}voidbutton3_actionPerformed(ActionEvente>{try{out.println("大家盡興聊,再會!">。out.flush(>。}catch(Exceptione2>{}finally{7/15System.exit(0>。}}voidbutton2_actionPerformed(ActionEvente>{Threadthread=newThread(this>。thread.start(>。}publicvoidrun(>{try{socket=newSocket(server.getText(>,Integer.parseInt(port.getText(>>>。in=newBufferedReader(newInputStreamReader(socket.getInputStream(>>>。out=newPrintWriter(socket.getOutputStream(>>。button1.setEnabled(true>。receiverr=newreceiver(>。Threadt=newThread(r>。t.start(>。textArea1.append("歡迎加入聊天室\n">。//button2.setEnabled(false>。}catch(Exceptione>{textArea1.append("連結(jié)失??!請確認(rèn)服務(wù)器地點而且服務(wù)器已啟動\n">。}}privateclassreceiverimplementsRunnable{publicvoidrun(>{Strings1=null。try{s1=in.readLine(>。while(s1!=null>{if(s1.equals("Clearusers!">>{8/15l1.removeAllElements(>。l1.addElement("大家">。jList1.setSelectedIndex(0>。}elseif(jLabel3.getText(>.equals("">>{jLabel3.setText(s1>。}elseif(s1.length(><8&&!jLabel3.getText(>.equals(s1>>{l1.addElement(s1>。}elseif(!jLabel3.getText(>.equals(s1>>{textArea1.append(s1+"\n">。}s1=in.readLine(>。}in.close(>。out.close(>。socket.close(>。}catch(Exceptione>{}button1.setEnabled(false>。}}}服務(wù)器端代碼:.*。importjava.io.*。publicclassServerThreadimplementsRunnable{ServerSocketserver=null。BufferedReaderin=null。PrintWriterout=null。InetAddressmyServer=null。9/15Objectusers[]=newObject[1000]。staticintuserCount=0。publicServerThread(>{try{init(>。}catch(Exceptione>{e.printStackTrace(>。}}privatevoidinit(>throwsException{Threadthread=newThread(this>。thread.start(>。}publicvoidrun(>{try{server=newServerSocket(8000>。Socketsocket。while(true>{socket=server.accept(>。if(socket!=null>{users[userCount]=socket。Receiverr=newReceiver(socket,userCount>。Threadt=newThread(r>。t.start(>。userCount++。}}}catch(Exceptione>{e.printStackTrace(>。}10/15}privateclassReceiverimplementsRunnable{Suser。Receiver(Socketsocket,intuser>{this.socket=socket。this.user=user。}publicvoidrun(>{BufferedReaderin=null。PrintWriterout=null。Strings1=userNo。try{out=newPrintWriter(socket.getOutputStream(>>。out.println("user"+user>。out.flush(>。for(intj=0。j<userCount。j++>{if(users[j]==null>continue。out=newPrintWriter(((Socket>users[j]>.getOutputStream(>>。out.println("Clearusers!">。out.flush(>。for(intk=0。k<userCount。k++>{out.println("user"+k>。out.flush(>。}}in=newBufferedReader(new11/15InputStreamReader(socket.getInputStream(>>>。s1=in.readLine(>。while(!s1.equals("大家盡興聊,再會!">>{inttemp=s1.indexOf("對">。inttemp1=s1.indexOf("說"
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色建筑租賃合同(含能源管理)2篇
- 2025年度個人債務(wù)重組合同范本2篇
- 2025版施工隊中途退場原因調(diào)查及責(zé)任追究合同3篇
- 2025-2030全球微注塑材料行業(yè)調(diào)研及趨勢分析報告
- 2024年全國營養(yǎng)師技能大賽福建選拔賽考試題庫(附答案)
- 2025-2030全球軍事應(yīng)用防護(hù)涂層行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球駐極體過濾介質(zhì)行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球植入性人工器官行業(yè)調(diào)研及趨勢分析報告
- 外墻清洗合同范例
- 2025年度鋼材價格預(yù)測居間服務(wù)協(xié)議3篇
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 國旗班指揮刀訓(xùn)練動作要領(lǐng)
- 2024年國家工作人員學(xué)法用法考試題庫及參考答案
- 國家公務(wù)員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術(shù)》課件 第6講 阻燃纖維及織物
- 2021-2022學(xué)年遼寧省重點高中協(xié)作校高一上學(xué)期期末語文試題
- 同等學(xué)力英語申碩考試詞匯(第六版大綱)電子版
- 人教版五年級上冊遞等式計算100道及答案
- 墓地個人協(xié)議合同模板
- 2024年部編版初中語文各年級教師用書七年級(上冊)
- 2024年新課標(biāo)全國Ⅰ卷語文高考真題試卷(含答案)
評論
0/150
提交評論