版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Java實訓(xùn)設(shè)計報告電子信息工程學(xué)院專業(yè):軟件技術(shù)班級:1班 實訓(xùn):聊天室項目簡介項目名稱聊天室項目功能運(yù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、關(guān)閉服務(wù)器項目目的1.能在程序中熟練應(yīng)用Java 多線程技術(shù)2.熟悉Java C/S 程序的結(jié)構(gòu)和工作原理3.能開發(fā)客戶端應(yīng)用程序4.會編寫服務(wù)器端多線程應(yīng)用程序。5.熟悉Java
2、數(shù)據(jù)庫連接方法,能在程序中讀寫數(shù)據(jù)庫主要技術(shù)Java編程語言、javaSwing組件開發(fā)環(huán)境jdk1.6.0_10項目特點(diǎn)使用組件構(gòu)建的C/S應(yīng)用程序各項功能的組織合理搭配應(yīng)用圖標(biāo)控制功能實現(xiàn)技術(shù)重點(diǎn)構(gòu)建基于C/S架構(gòu)的應(yīng)用程序Swing組件應(yīng)用事件監(jiān)聽的應(yīng)用方法的編寫技術(shù)難點(diǎn)Swing組件的應(yīng)用事件監(jiān)聽器的使用異常處理方法簡便的選擇系統(tǒng)總體設(shè)計1、設(shè)計思路聊天系統(tǒng)的設(shè)計跟普通網(wǎng)站設(shè)計有著許多不同的地方,普通網(wǎng)站設(shè)計所考慮的因素,例如,普通網(wǎng)站需要對布局進(jìn)入大量美化以及動畫設(shè)計等等,而聊天室只要提供滿足訪客雙方直接實時聊天即可。因此,在設(shè)計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設(shè)計要點(diǎn):在In
3、ternet上的聊天程序一般都是以服務(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、各個模塊詳細(xì)的功能描述。1、服務(wù)器端功能描述:啟動服務(wù)器端。2、客戶端功能描述: 啟動客戶端;顯示登錄昵稱:顯示聊天記錄:發(fā)送信息;退出聊天室。系統(tǒng)詳細(xì)設(shè)計1、界面設(shè)計主要由類
4、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源文件的總體設(shè)計。C
5、lient(主類)客戶端Client類負(fù)責(zé)創(chuàng)建聊天室客戶端的主窗口,該類含有main方法,計算器從該類開始執(zhí)行。ServerThread(主類)服務(wù)器 ServerThread類負(fù)責(zé)創(chuàng)建聊天室服務(wù)器的主窗口,該類含有main方法,計算器從該類開始執(zhí)行。二詳細(xì)代碼設(shè)計聊天室程序設(shè)計詳細(xì)代碼如下:客戶端代碼:package client;import javax.swing.UIManager;public class Client public Client() Frame1 frame=new Frame1(); frame.setVisible(true); frame.validate()
6、; 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 extends JF
7、rame 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 JButton(); Socke
8、t 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(); DefaultListM
9、odel 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(); textArea1.setE
10、ditable(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,314); this.setTitle(客戶端)
11、; 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 Rectangle(334,216,62,23); button1.setEnabled(false); button1.setFont(new java.
12、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) button1_actionPerformed(e); ); button2.setBounds(new Rectangle(266,251,58,24); button2.setFont(n
13、ew 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 actionPerformed(ActionEvent e) button2_actionPerformed(e); ); button3.setBounds(new Rectangle(333,251,62,22); button3.s
14、etFont(new java.awt.Font(Dialog,Font.PLAIN,12); button3.setText(退出); button3.setForeground(new Color(110,110,250); button3.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button3_actionPerformed(e); ); jLabel1.setFont(new java.awt.Font(Dialog,Font.PLA
15、IN,12); jLabel1.setToolTipText(); jLabel1.setHorizontalAlignment(SwingConstants.RIGHT); jLabel1.setHorizontalTextPosition(SwingConstants.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(Dialo
16、g,Font.PLAIN,12); jLabel2.setToolTipText(); jLabel2.setHorizontalAlignment(SwingConstants.RIGHT); 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.setB
17、ounds(new Rectangle(202,251,40,22); jList1.setFont(new java.awt.Font(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); jScrollPan
18、e1.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(po
19、rt,null); contentPane.add(label1,null); contentPane.add(jScrollPane1,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.setTe
20、xt(); void button3_actionPerformed(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
21、(port.getText(); 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) text
22、Area1.append(連接失??!請確認(rèn)服務(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.getText().equals() jLabel3.setTex
23、t(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.setEnabled(false); 服務(wù)器端代碼:package server;import .*;import java.io.*;public
24、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(Exception e)e.printStackTrace();private void init() throws ExceptionThread thre
25、ad=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 Thread(r);t.start();userCount+;catch(Exception e)e.printStackTrace();priva
26、te 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 PrintWriter(socket.getOutputStream();out.println(user+user);out.flush();for(
27、int j=0;juserCount;j+)if(usersj=null)continue;out=new PrintWriter(Socket)usersj).getOutputStream();out.println(Clear users!);out.flush();for(int k=0;kuserCount;k+)out.println(user+k);out.flush();in=new BufferedReader(new InputStreamReader(socket.getInputStream(); s1=in.readLine(); while(!s1.equals(大家盡情聊,再見!) in
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 類風(fēng)濕關(guān)節(jié)炎慢病管理
- 新生兒糖尿病的護(hù)理課件
- 高三化學(xué)一輪復(fù)習(xí) 第五章 《化工生產(chǎn)中的重要非金屬元素》 專題講解 氣體的制備、凈化和收集 課件
- 巧用繩課件教學(xué)課件
- 2-1-3 碳酸鈉與碳酸氫鈉 課件 高一上學(xué)期化學(xué)人教版(2019)必修第一冊
- 吉林省2024七年級數(shù)學(xué)上冊第1章有理數(shù)階段綜合訓(xùn)練范圍1.6~1.8課件新版華東師大版
- 低壓裝表接電安全
- 報任安書公開課教案
- 家居建材客服合同范本
- 幼兒園衛(wèi)生清潔工勞動合同
- 不良資產(chǎn)處置盡職指引
- 人教部編版七年級歷史上冊第19課 北魏政治和北方民族大交融課件(23張PPT)
- 機(jī)械設(shè)備定期檢查維修保養(yǎng)使用臺賬
- 麗聲北極星分級繪本第四級上 Stop!Everyone Stop!教學(xué)設(shè)計
- 小學(xué)科學(xué)教育科學(xué)三年級上冊天氣《認(rèn)識氣溫計》教學(xué)設(shè)計
- 希爾頓酒店市場營銷環(huán)境的swot分析 2
- 液化氣站氣質(zhì)分析報告管理制度
- 可編輯修改中國地圖模板
- 水務(wù)集團(tuán)有限公司檔案管理制度資料
- 為先祖立碑祭文五篇
- DBJ50T-232-2016 建設(shè)工程監(jiān)理工作規(guī)程
評論
0/150
提交評論