版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JAVA實(shí)訓(xùn)報(bào)告--聊天室《Java實(shí)訓(xùn)》設(shè)計(jì)報(bào)告
《Java實(shí)訓(xùn)》設(shè)計(jì)報(bào)告
電子信息工程學(xué)院
專業(yè):
軟件技術(shù)
班級(jí):
1班
實(shí)訓(xùn):談天室
工程簡(jiǎn)介
工程名稱
談天室
工程功能
運(yùn)用java程序編寫談天室,實(shí)現(xiàn)簡(jiǎn)潔的談天功能。它是圖形界面,線程,流與文件系統(tǒng)等技術(shù)的綜合應(yīng)用。其界面主要采納了java.awt包,java.swing包以及java.util包等。程序?qū)崿F(xiàn)了談天室的根本功能,其中有:
1、啟動(dòng)效勞器。
2、進(jìn)入客戶端界面。
3、登錄談天室。
4、發(fā)送信息(實(shí)現(xiàn)按回車鍵發(fā)送消息)。
5、關(guān)閉效勞器
工程目的
1.能在程序中嫻熟應(yīng)用Java
多線程技術(shù)
2.熟識(shí)Java
C/S
程序的構(gòu)造和工作原理
3.能開發(fā)客戶端應(yīng)用程序
4.會(huì)編寫效勞器端多線程應(yīng)用程序。
5.熟識(shí)Java
數(shù)據(jù)庫連接方法,
能在程序中讀寫數(shù)據(jù)庫
主要技術(shù)
Java編程語言、javaSwing組件
開發(fā)環(huán)境
jdk1.6.0_10
項(xiàng)
目
特
點(diǎn)
使用組件構(gòu)建的C/S應(yīng)用程序
各項(xiàng)功能的組織合理搭配應(yīng)用
圖標(biāo)掌握功能實(shí)現(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)聽器的使用
特別處理
方法簡(jiǎn)便的選擇
系統(tǒng)總體設(shè)計(jì)
1、設(shè)計(jì)思路
談天系統(tǒng)的設(shè)計(jì)跟一般網(wǎng)站設(shè)計(jì)有著很多不同的地方,一般網(wǎng)站設(shè)計(jì)所考慮的因素,例如,一般網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫設(shè)計(jì)等等,而談天室只要供應(yīng)滿意訪客雙方直接實(shí)時(shí)談天即可。因此,在設(shè)計(jì)談天系統(tǒng)的過程中,必需要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):
在Internet上的談天程序一般都是以效勞器供應(yīng)效勞端連接響應(yīng),使用者通過客戶端程序登錄到效勞器,就可以與登錄在同一效勞器上的用戶交談,這是一個(gè)面對(duì)連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)效勞器端和客戶端兩局部程序。
1.首先通過繼承JFrame類構(gòu)造效勞器界面。
2.設(shè)計(jì)客戶端程序使其能夠完成正常的通信功能。
3.設(shè)計(jì)監(jiān)聽程序,使其顯示登錄的ip地址端口號(hào),以及用戶昵稱,通過偵聽按鈕可以調(diào)用客戶端程序,實(shí)現(xiàn)談天功能。
2、各個(gè)模塊具體的功能描述。
1、效勞器端功能描述:
啟動(dòng)效勞器端。
2、客戶端功能描述:
啟動(dòng)客戶端;
顯示登錄昵稱:
顯示談天記錄:
發(fā)送信息;
退出談天室。
系統(tǒng)具體設(shè)計(jì)
1、界面設(shè)計(jì)
主要由類ChatRoom來實(shí)現(xiàn),界面實(shí)際總體如下:輸入昵稱的文本框,輸入IP地址的文本框以及輸入端口的文本框;連接的按鈕;退出按鈕;承受消息的文本域;發(fā)送消息文本框;發(fā)送按鈕。
工程設(shè)計(jì)
在設(shè)計(jì)談天室時(shí),編寫3個(gè)Java源文件:Client.java、Frame1.java、ServerThread.java;
分別放在兩個(gè)包中,一個(gè)是client,放Client.java、Frame1.java;一個(gè)是server,放ServerThread.java;談天室除了上述Java源文件所給出的類外,還需要Java系統(tǒng)供應(yīng)的一些重要類,如JButton,JTextField等。
下面是Java源文件的總體設(shè)計(jì)。
Client(主類)客戶端
Client類負(fù)責(zé)創(chuàng)立談天室客戶端的主窗口,該類含有main方法,計(jì)算器從該類開頭執(zhí)行。
ServerThread(主類)效勞器
ServerThread類負(fù)責(zé)創(chuàng)立談天室效勞器的主窗口,該類含有main方法,計(jì)算器從該類開頭執(zhí)行。
二具體代碼設(shè)計(jì)
談天室程序設(shè)計(jì)具體代碼如下:
客戶端代碼:
package
client;
import
java*.swing.UIManager;
public
class
Client
{
public
Client(){
Frame1
frame=new
Frame1();
frame.setVisible(true);
frame.validate();
}
public
static
void
main(String[]
args){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(E*ception
e){
e.printStackTrace();
}
new
Client();
}
}
package
client;
import
java.awt.*;
import
java.awt.event.*;
import
java*.swing.*;
import
.*;
import
java.io.*;
public
class
Frame1
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
JButton();
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();
DefaultListModel
l1=new
DefaultListModel();
public
Frame1(){
try{
init();
}catch(E*ception
e){
e.printStackTrace();
}
}
private
void
init()
throws
E*ception{
server.setText(InetAddress.getLocalHost().getHostAddress());
server.setBounds(new
Rectangle(69,252,74,22));
contentPane=(JPanel)this.getContentPane();
textArea1.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,314));
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
Rectangle(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
actionPered(ActionEvent
e){
button1_actionPered(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
actionPered(ActionEvent
e){
button2_actionPered(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.event.ActionListener(){
public
void
actionPered(ActionEvent
e){
button3_actionPered(e);
}
});
jLabel1.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
jLabel1.setToolTipText(““);
jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel1.setHorizontalTextPosition(SwingConstants.RIGHT);
jLabel1.setText(“效勞器:“);
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);
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(“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);
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);
}
void
button1_actionPered(ActionEvent
e){
out.println(jLabel3.getText()+“對(duì)“+l1.getElementAt(jList1.getSelectedInde*())+“說:“+textField1.getText());
out.();
textField1.setText(““);
}
void
button3_actionPered(ActionEvent
e){
try{
out.println(“大家盡情聊,再見!“);
out.();
}catch(E*ception
e2){}
finally{
System.e*it(0);
}
}
void
button2_actionPered(ActionEvent
e){
Thread
thread=new
Thread(this);
thread.start();
}
public
void
run(){
try{
socket=new
Socket(server.getText(),Integer.parseInt(port.getText()));
in=new
BufferedReader(new
StreamReader(socket.getStream()));
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(E*ception
e){
textArea1.append(“連接失?。≌?qǐng)確認(rèn)效勞器地址并且效勞器已啟動(dòng)/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.setSelectedInde*(0);
}else
if(jLabel3.getText().equals(““)){
jLabel3.setText(s1);
}else
if(s1.length()<8
}else
if(!jLabel3.getText().equals(s1)){
textArea1.append(s1+“/n“);
}
s1=in.readLine();
}
in.close();
out.close();
socket.close();
}catch(E*ception
e){}
button1.setEnabled(false);
}
}
}
效勞器端代碼:
package
server;
import
.*;
import
java.io.*;
public
class
ServerThread
implements
Runnable{
ServerSocket
server=null;
BufferedReader
in=null;
PrintWriter
out=null;
InetAddress
myServer=null;
Object
users[]=new
Object[1000];
static
int
userCount=0;
public
ServerThread(){
try{
init();
}catch(E*ception
e){
e.printStackTrace();
}
}
private
void
init()
throws
E*ception{
Thread
thread=new
Thread(this);
thread.start();
}
public
void
run(){
try{
server=new
ServerSocket(8000);
Socket
socket;
while(true){
socket=server.accept();
if(socket!=null){
users[userCount]=socket;
Receiver
r=new
Receiver(socket,userCount);
Thread
t=new
Thread(r);
t.start();
userCount++;
}
}
}catch(E*ception
e){
e.printStackTrace();
}
}
private
class
Receiver
implements
Runnable{
Socket
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;
try{
out=new
PrintWriter(socket.getOutputStream());
out.println(“user“+user);
out.();
for(int
j=0;j<userCount;j++){
if(users[j]==null)
continue;
out=new
PrintWriter(((Socket)users[j]).getOutputStream());
out.println(“Clear
users!“);
out.();
for(int
k=0;k<userCount;k++){
out.println(“user“+k);
out.();
}
}
in=new
BufferedReader(new
StreamReader(socket.getStream()));
s1=in.readLine();
while(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 樹立規(guī)則為本服務(wù)理念,強(qiáng)化病歷書寫證據(jù)意識(shí)課件
- 2025年高考語文??急厮⒃囶}庫300題(含答案)
- 2025年畢節(jié)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 2025年桐城師范高等??茖W(xué)校高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025科學(xué)儀器行業(yè)發(fā)展趨勢(shì)與市場(chǎng)前景分析
- 2025養(yǎng)老行業(yè)發(fā)展趨勢(shì)與市場(chǎng)前景分析
- 建筑工程可行性研究合同協(xié)議書
- 演員合同書范本
- 經(jīng)典借款合同
- 海運(yùn)貨物運(yùn)輸合同范文
- 搞笑小品劇本《大城小事》臺(tái)詞完整版
- 人大代表小組活動(dòng)計(jì)劃人大代表活動(dòng)方案
- Vue3系統(tǒng)入門與項(xiàng)目實(shí)戰(zhàn)
- 2024年寧夏回族自治區(qū)中考英語試題含解析
- 光伏發(fā)電項(xiàng)目試驗(yàn)檢測(cè)計(jì)劃
- 房屋建筑工程投標(biāo)方案(技術(shù)方案)
- 靜脈輸液法操作并發(fā)癥的預(yù)防及處理
- 2025年高考語文作文備考:議論文萬能模板
- T-BJCC 1003-2024 首店、首發(fā)活動(dòng)、首發(fā)中心界定標(biāo)準(zhǔn)
- 外科手術(shù)及護(hù)理常規(guī)
- 鐵嶺衛(wèi)生職業(yè)學(xué)院?jiǎn)握袇⒖荚囶}庫(含答案)
評(píng)論
0/150
提交評(píng)論