Java源代碼___聊天室.doc_第1頁
Java源代碼___聊天室.doc_第2頁
Java源代碼___聊天室.doc_第3頁
Java源代碼___聊天室.doc_第4頁
Java源代碼___聊天室.doc_第5頁
免費預覽已結(jié)束,剩余16頁可下載查看

下載本文檔

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

文檔簡介

java聊天室Java聊天室制作人:_楊永生_制作時間:2012.9.26目錄1本文簡介22聊天室截圖與說明22.1用Java編譯:22.2服務(wù)器登錄界面22.3服務(wù)器窗口22.4客服端登錄界面32.5客服端窗口33服務(wù)器端63.1MyServer()方法63.2Login()方法103.3Time()方法134客戶端144.1MyClient()方法144.2Login()方法184.3Time()方法201 本文簡介這是一個簡單的Java聊天室,僅提供給一些剛學Java的學生做實驗,本文也是僅供參考.本文代碼都有注釋,希望讀者能讀懂代碼,本實驗內(nèi)部還有一些錯誤,比如只能一條一條的發(fā)信息,不能連發(fā),希望能解決本問題的朋友能給我發(fā)信息,我的QQ號就是百度號!2 聊天室截圖與說明2.1 用Java編譯:本代碼有七個類,放在六個java文件中,類名在下方希望讀者自己觀看,2.2 服務(wù)器登錄界面要先運行服務(wù)器端的程序用戶名:y密碼:1用戶名密碼可以自己設(shè)定點擊確定可以登錄,2秒后到服務(wù)端界面2.3 服務(wù)器窗口聊天室的IP為本機的網(wǎng)絡(luò)虛擬IP,在任何電腦上都能用,端口應(yīng)設(shè)置在1024以后,2.4 客服端登錄界面和服務(wù)器端的登錄一樣2.5 客服端窗口當?shù)卿浬虾?客服端就顯示已經(jīng)連接了,此時服務(wù)器端的窗口如下由于本程序設(shè)計的不是很完整,具體的聊天要先從客服端開始:在客服端輸入一條聊天內(nèi)容后按確定,在服務(wù)器端就可以收到信息,之后客戶端不能輸入了,要等待服務(wù)器端來信息后才能繼續(xù)輸入信息.想要結(jié)束聊天,直接可以關(guān)閉窗口,也可以輸入bye后斷開聊天有興趣的朋友可以繼續(xù)完善本實驗程序.3 服務(wù)器端3.1 MyServer()方法/服務(wù)器端代碼import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import .ServerSocket;import .Socket;import java.text.DateFormat;import java.util.Date;import javax.swing.*;public class MyServer /窗體實現(xiàn)類protected JLabel lab10; /全體變量,做傳遞的一個組件 String s=已經(jīng)成功連接; /初始字符串,在兩個聊天窗口鏈接成功時輸出,同時作為兩個窗口傳遞字符的一個變量 /構(gòu)造方法 public MyServer()try/異常處理tryJFrame frame=new JFrame(服務(wù)器窗口); /設(shè)置窗體frame.setLayout(null); /讓布局管理器為空 ,使用絕對定位Font fnt=new Font(Serief,Font.PLAIN,40);/字體設(shè)置Font fnt1=new Font(Serief,Font.PLAIN,20);/字體設(shè)置/我的用戶名顯示JLabel lab1=new JLabel(服務(wù)器名:,JLabel.LEFT); /標簽實例化,文本左對齊lab1.setBounds(8, 10, 100, 20); /設(shè)置組件位置及大小frame.add(lab1); /添加組件JTextField text2=new JTextField(30); /單行文本輸入組件text2.setBounds(150, 10, 200, 20);/設(shè)置組件位置及大小text2.setEnabled(false);/文本條不可編輯text2.setText(笑笑聊天室);/輸入內(nèi)容text2.setFont(fnt1);/設(shè)置字體frame.add(text2);/添加組件/服務(wù)器IP顯示JLabel lab2=new JLabel(當前服務(wù)器IP:,JLabel.LEFT); /標簽實例化,文本左對齊lab2.setBounds(8, 45, 100, 20);/設(shè)置組件位置及大小frame.add(lab2);/添加組件JTextField text3=new JTextField(30);/單行文本輸入組件text3.setBounds(150, 45, 200, 20);/設(shè)置組件位置及大小text3.setEnabled(false); /文本不可編輯text3.setText();/輸入內(nèi)容text3.setFont(fnt1);/設(shè)置字體frame.add(text3); /添加組件/服務(wù)器端口顯示JLabel lab3=new JLabel(當前服務(wù)器端口:,JLabel.LEFT); /標簽實例化,文本左對齊lab3.setBounds(8, 80, 100, 20);/設(shè)置組件位置及大小frame.add(lab3);/添加組件JTextField text4=new JTextField(30);/單行文本輸入組件text4.setBounds(150, 80, 200, 20);/設(shè)置組件位置及大小text4.setEnabled(false);/文本不可編輯text4.setText(8888);/輸入內(nèi)容text4.setFont(fnt1);/設(shè)置字體frame.add(text4);/添加組件/聊天記錄顯示JLabel lab4=new JLabel(聊天記錄如下:,JLabel.LEFT); /標簽實例化,文本左對齊lab4.setBounds(8, 115, 100, 20);/設(shè)置組件位置及大小frame.add(lab4);/添加組件final JTextArea text1=new JTextArea();/多行文本輸入組件text1.setEnabled(false);/文本不可編輯text1.setLineWrap(true);/自動換行 JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); /設(shè)置滾動條,水平和垂直滾動條始終顯示scr.setBounds(8, 150, 450, 350);/設(shè)置組件位置及大小frame.add(scr);/添加組件/聊天輸入窗口及確定JLabel lab5=new JLabel(請輸入聊天內(nèi)容:,JLabel.LEFT); /標簽實例化,文本左對齊lab5.setBounds(8, 500, 100, 20);/設(shè)置組件位置及大小frame.add(lab5);/添加組件final JTextArea text5=new JTextArea();/多行文本輸入組件text5.setLineWrap(true);/自動換行JScrollPane scr2=new JScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);/設(shè)置滾動條,水平和垂直滾動條始終顯示scr2.setBounds(150, 500, 300, 50);/設(shè)置組件位置及大小frame.add(scr2);/添加組件 final JButton but=new JButton(確定);/設(shè)置確定按鈕but.setFont(fnt);/添加字體設(shè)置but.setBounds(480, 500, 200, 50);/設(shè)置組件位置及大小but.addActionListener(new ActionListener() /采用內(nèi)部匿名類public void actionPerformed(ActionEvent e)if(e.getSource()=but) /判斷觸發(fā)器源是否是提交按鈕text1.append(笑笑: +lab10.getText()+n );/在聊天記錄上添加文本text1.append(text5.getText()+n); /將輸入的聊天內(nèi)容輸出在聊天記錄上 s=text5.getText(); /得到聊天內(nèi)容 text5.setText(); / 將聊天窗口內(nèi)容設(shè)置為空 ) ;frame.add(but);/添加組件/當前時間顯示JLabel lab7=new JLabel(時間顯示:,JLabel.LEFT);/標簽實例化,文本左對齊lab7.setBounds(450, 20, 100, 20);/設(shè)置組件位置及大小frame.add(lab7);/添加組件DateFormat df=DateFormat.getDateTimeInstance();/取得系統(tǒng)時間String df2= df.format(new Date();/將時間轉(zhuǎn)換成字符串JLabel lab8=new JLabel(df2,JLabel.LEFT);/標簽實例化,文本左對齊lab8.setBounds(520, 20, 130, 20);/設(shè)置組件位置及大小frame.add(lab8);/添加組件lab10=lab8; /傳遞時間顯示,以便能在聊天記錄上顯示記錄時間new Time(lab8); /使時間動態(tài)顯示/用戶列表顯示JLabel lab6=new JLabel(用戶列表:,JLabel.LEFT);/標簽實例化,文本左對齊lab6.setBounds(500, 40, 100, 20);/設(shè)置組件位置及大小frame.add(lab6);/添加組件JTextArea text6=new JTextArea();/標簽實例化,文本左對齊text6.setEnabled(false);/文本不可編輯text6.setLineWrap(true);/自動換行JScrollPane scr3=new JScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);/設(shè)置滾動條,水平和垂直滾動條始終顯示scr3.setBounds(460, 70, 220, 420);/設(shè)置組件位置及大小frame.add(scr3);/添加組件/窗口的屬性frame.setSize(700,600);/窗口大小frame.getContentPane().setBackground(Color.pink);/窗口的背景顏色frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口時關(guān)閉程序frame.setLocation(100,50);/在電腦桌面上出現(xiàn)的位置frame.setVisible(true);/顯示窗口/連個窗口連接/建立Server Socket并等待連接請求 ServerSocket server =new ServerSocket(8889); Socket socket=server.accept(); /連接建立,通過Socket獲取連接上的輸入/輸出流 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(); final PrintWriter out =new PrintWriter(socket.getOutputStream(); /先讀取Client發(fā)送的數(shù)據(jù),然后從標準輸入讀取數(shù)據(jù)發(fā)送給Client當接收到bye時關(guān)閉連接String s1=,s2=; /標志字符串,作為傳遞字符串使用 while(!(s1=in.readLine().equals(bye) /得到其他窗口傳遞的字符串,并判斷是否結(jié)束 text6.setText(可可在線); /當連接成功是在用戶列表中 輸出用戶名字 if(!s1.equals() /如果傳遞的字符串不為空 text1.append(可可: +lab10.getText()+n );/在聊天記錄上添加文本 text1.append(s1+n); /將輸入的聊天內(nèi)容輸出在聊天記錄上 s2=s;/將在聊天窗口中得到的字符串傳遞給輸出字符串 for(;s2.equals()|s2.equals(null);s2=s)/當傳遞的字符串為空時等待用戶輸入聊天內(nèi)容 s=;/將在聊天窗口中得到的字符串設(shè)為空 if(!s2.equals()&!s2.equals(null)/ s2不為空時做 out.println(s2);/向其他窗口輸出字符串 out.flush();/輸出聊天內(nèi)容 /關(guān)閉連接 in.close(); out.close(); socket.close(); server.close(); catch(Exception e) /main函數(shù)public static void main(String args)new Login();/登錄實現(xiàn)3.2 Login()方法import java.awt.event.WindowAdapter ;import java.awt.event.ActionListener ;import java.awt.event.WindowEvent ;import java.awt.event.ActionEvent ;import java.awt.Color ;import java.awt.Font ;import javax.swing.JFrame ;import javax.swing.JButton ;import javax.swing.JLabel ;import javax.swing.JTextField ;import javax.swing.JPasswordField ;/用戶名和密碼設(shè)置class LoginCheck/設(shè)置登錄密碼private String name ;/用戶名private String password ;/密碼/構(gòu)造方法public LoginCheck(String name,String password) = name ;/傳遞用戶名this.password = password ;/傳遞密碼/驗證用戶名和密碼public boolean validate()/驗證方法if(y.equals(name)&1.equals(password) /判斷用戶名和密碼是否正確return true ;/返回trueelsereturn false ;/返回false;/登錄窗口class Login/登錄類名boolean f=false;/按登錄時設(shè)置的一個標志private JFrame frame = new JFrame(Welcome To MLDN) ; /設(shè)置窗體private JButton submit = new JButton(登陸);/設(shè)置登錄按鈕private JButton reset = new JButton(重置);/設(shè)置重置按鈕private JLabel nameLab = new JLabel(服務(wù)器:) ;/標簽實例化private JLabel passLab = new JLabel(密 碼:) ;/標簽實例化private JLabel infoLab = new JLabel(服務(wù)器登陸系統(tǒng)) ;/標簽實例化private JTextField nameText = new JTextField(10) ;/單行文本輸入條private JPasswordField passText = new JPasswordField() ;/單行密碼文本輸入條public Login()/登錄窗口構(gòu)造方法Font fnt = new Font(Serief,Font.ITALIC + Font.BOLD,12) ;/設(shè)置字體infoLab.setFont(fnt) ;/ 設(shè)置標簽的顯示文字submit.addActionListener(new ActionListener() /采用內(nèi)部匿名類public void actionPerformed(ActionEvent e)if(e.getSource()=submit) /判斷觸發(fā)器源是否是提交按鈕String tname = nameText.getText() ; /得到輸入的用戶名String tpass = new String(passText.getPassword() ;/得到輸入的密碼,此時通過getPassageword()方法返回的是字符數(shù)組LoginCheck log = new LoginCheck(tname,tpass) ;/實例化LoginCheck對象,傳入輸入的用戶名和密碼if(log.validate()/對用戶名和密碼進行驗證try /線程異常處理tryThread.sleep(2000); /2秒后打開聊天窗口 f=true; /登錄成功后的表示項為trueframe.dispose(); /關(guān)閉本窗口catch(Exception ee)/異常獲取elseinfoLab.setText(登陸失敗,錯誤的用戶名或密碼!) ;/登錄失敗) ;reset.addActionListener(new ActionListener() /采用內(nèi)部匿名類public void actionPerformed(ActionEvent e)if(e.getSource()=reset) /判斷觸發(fā)器源是否是提交按鈕nameText.setText() ;/設(shè)置文本框中的內(nèi)容passText.setText() ;/設(shè)置文本框中的內(nèi)容infoLab.setText(服務(wù)器登陸系統(tǒng)) ;/恢復標簽顯示) ;frame.addWindowListener(new WindowAdapter()/加入窗口監(jiān)聽public void windowClosing(WindowEvent e) ;/ 加入事件frame.setLayout(null) ;/使用絕對定位nameLab.setBounds(5,5,60,20) ;/設(shè)置標簽的位置及大小passLab.setBounds(5,30,60,20) ;/設(shè)置標簽的位置及大小infoLab.setBounds(5,65,220,30) ;/設(shè)置標簽的位置及大小nameText.setBounds(65,5,100,20) ;/設(shè)置文本域的位置及大小passText.setBounds(65,30,100,20) ;/設(shè)置密碼域的位置及大小submit.setBounds(165,5,60,20) ;/設(shè)置按鈕的位置及大小reset.setBounds(165,30,60,20) ;/設(shè)置按鈕的位置及大小frame.add(nameLab) ;/向窗體加入標簽frame.add(passLab) ;/向窗體加入標簽frame.add(infoLab) ;/向窗體加入標簽frame.add(nameText) ;/向窗體加入文本框frame.add(passText) ;/向窗體加入密碼框frame.add(submit) ;/向窗體加入按鈕frame.add(reset) ;/向窗體加入按鈕frame.setSize(280,130) ;/設(shè)置窗體大小frame.getContentPane().setBackground(Color.green) ;/設(shè)置窗體的背景顏色frame.setLocation(300,200) ;/設(shè)置窗體在電腦桌面上的位置frame.setVisible(true) ;/顯示窗口while(f=false) /當?shù)卿浭r,一直循環(huán)運行,new MyServer();/顯示窗體頁面3.3 Time()方法import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.JLabel;import javax.swing.Timer;/時間類public class Time public Time(JLabel time) /構(gòu)造方法this.setTimer(time); /設(shè)置時間public void setTimer(JLabel time) /設(shè)置時間方法 final JLabel varTime = time; /傳遞組件 Timer timeAction = new Timer(1000, new ActionListener() /時間監(jiān)聽 public void actionPerformed(ActionEvent e) long timemillis = System.currentTimeMillis(); /得到系統(tǒng)時間 SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); /轉(zhuǎn)換日期顯示格式 varTime.setText(df.format(new Date(timemillis); /輸出得到的時間 ); timeAction.start(); /開啟線程 4 客戶端4.1 MyClient()方法import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import .Socket;import java.text.DateFormat;import java.util.Date;import javax.swing.*;public class MyClientprotected JLabel lab10;/全體變量,做傳遞的一個組件 String s=連接成功;/初始字符串,在兩個聊天窗口鏈接成功時輸出,同時作為兩個窗口傳遞字符的一個變量/構(gòu)造方法 public MyClient()JFrame frame=new JFrame(用戶端窗口); /設(shè)置窗體frame.setLayout(null); /讓布局管理器為空 ,使用絕對定位Font fnt=new Font(Serief,Font.PLAIN,40);/字體設(shè)置Font fnt1=new Font(Serief,Font.PLAIN,20);/字體設(shè)置/我的用戶名顯示JLabel lab1=new JLabel(服務(wù)器名:,JLabel.LEFT); /標簽實例化,文本左對齊lab1.setBounds(8, 10, 100, 20); /設(shè)置組件位置及大小frame.add(lab1); /添加組件JTextField text2=new JTextField(30); /單行文本輸入組件text2.setBounds(150, 10, 200, 20);/設(shè)置組件位置及大小text2.setEnabled(false);/文本條不可編輯text2.setText(可可聊天室);/輸入內(nèi)容text2.setFont(fnt1);/設(shè)置字體frame.add(text2);/添加組件/服務(wù)器IP顯示JLabel lab2=new JLabel(當前服務(wù)器IP:,JLabel.LEFT); /標簽實例化,文本左對齊lab2.setBounds(8, 45, 100, 20);/設(shè)置組件位置及大小frame.add(lab2);/添加組件JTextField text3=new JTextField(30);/單行文本輸入組件text3.setBounds(150, 45, 200, 20);/設(shè)置組件位置及大小text3.setEnabled(false); /文本不可編輯text3.setText();/輸入內(nèi)容text3.setFont(fnt1);/設(shè)置字體frame.add(text3); /添加組件/服務(wù)器端口顯示JLabel lab3=new JLabel(當前服務(wù)器端口:,JLabel.LEFT); /標簽實例化,文本左對齊lab3.setBounds(8, 80, 100, 20);/設(shè)置組件位置及大小frame.add(lab3);/添加組件JTextField text4=new JTextField(30);/單行文本輸入組件text4.setBounds(150, 80, 200, 20);/設(shè)置組件位置及大小text4.setEnabled(false);/文本不可編輯text4.setText(8888);/輸入內(nèi)容text4.setFont(fnt1);/設(shè)置字體frame.add(text4);/添加組件/聊天記錄顯示JLabel lab4=new JLabel(聊天記錄如下:,JLabel.LEFT); /標簽實例化,文本左對齊lab4.setBounds(8, 115, 100, 20);/設(shè)置組件位置及大小frame.add(lab4);/添加組件final JTextArea text1=new JTextArea();/多行文本輸入組件text1.setEnabled(false);/文本不可編輯text1.setLineWrap(true);/自動換行JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); /設(shè)置滾動條,水平和垂直滾動條始終顯示scr.setBounds(8, 150, 450, 350);/設(shè)置組件位置及大小frame.add(scr);/添加組件/聊天輸入窗口及確定JLabel lab5=new JLabel(請輸入聊天內(nèi)容:,JLabel.LEFT); /標簽實例化,文本左對齊lab5.setBounds(8, 500, 100, 20);/設(shè)置組件位置及大小frame.add(lab5);/添加組件final JTextArea text5=new JTextArea();/多行文本輸入組件text5.setLineWrap(true);/自動換行JScrollPane scr2=new JScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);/設(shè)置滾動條,水平和垂直滾動條始終顯示scr2.setBounds(150, 500, 300, 50);/設(shè)置組件位置及大小frame.add(scr2);/添加組件 final JButton but=new JButton(確定);/設(shè)置確定按鈕but.setFont(fnt);/添加字體設(shè)置but.setBounds(480, 500, 200, 50);/設(shè)置組件位置及大小but.addActionListener(new ActionListener() /采用內(nèi)部匿名類public void actionPerformed(ActionEvent e)if(e.getSource()=but) /判斷觸發(fā)器源是否是提交按鈕text1.append(可可: +lab10.getText()+n );/在聊天記錄上添加文本text1.append(text5.getText()+n);/將輸入的聊天內(nèi)容輸出在聊天記錄上 s=text5.getText(); /得到聊天內(nèi)容 text5.setText(); / 將聊天窗口內(nèi)容設(shè)置為空 ) ;frame.add(but);/添加組件/當前時間顯示JLabel lab7=new JLabel(時間顯示:,JLabel.LEFT);/標簽實例化,文本左對齊lab7.setBounds(450, 20, 100, 20);/設(shè)置組件位置及大小frame.add(lab7);/添加組件DateFormat df=DateFormat.getDateTimeInstance();/取得系統(tǒng)時間String df2= df.format(new Date();/將時間轉(zhuǎn)換成字符串JLabel lab8=new JLabel(df2,JLabel.LEFT);/標簽實例化,文本左對齊lab8.setBounds(520, 20, 130, 20);/設(shè)置組件位置及大小frame.add(lab8);/添加組件lab10=lab8; /傳遞時間顯示,以便能在聊天記錄上顯示記錄時間new Time(lab8); /使時間動態(tài)顯示/用戶列表顯示JLabel lab6=new JLabel(用戶列表:,JLabel.LEFT);/標簽實例化,文本左對齊lab6.setBounds(500, 40, 100, 20);/設(shè)置組件位置及大小frame.add(lab6);/添加組件JTextArea text6=new JTextArea();/標簽實例化,文本左對齊text6.setEnabled(false);/文本不可編輯text6.setLineWrap(true);/自動換行JScrollPane scr3=new JScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);/設(shè)置滾動條,水平和垂直滾動條始終顯示scr3.setBounds(460, 70, 220, 420);/設(shè)置組件位置及大小frame.add(scr3);/添加組件/窗口的屬性frame.setSize(700,600);/窗口大小frame.getContentPane().setBackground(Color.pink);/窗口的背景顏色frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/關(guān)閉窗口時關(guān)閉程序frame.setLocation(10,10);/在電腦桌面上出現(xiàn)的位置frame.setVisible(true);/顯示窗口try /try異常處理 Socket socket=new Socket(,8889); /發(fā)出連接請求 /建立連接,通過Socket獲得連接上的輸入/輸出流 PrintWriter out =new PrintWriter(socket.getOutputStream(); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream(); /從標準輸入中讀取一行,發(fā)送Server端,當用戶輸入bye時結(jié)束連接 do while(s.equals()|s.equals(null)/當傳遞的字符串為空時等待用戶輸入聊天內(nèi)容 if(!s.equals()&!s.equals(null)/s不為空時做 out.println(s); /向其他窗口輸出字符串 s=; /將在聊天窗口中得到的字符串設(shè)為空 out.flush();/輸出聊天內(nèi)容 if(!s.equals(bye) /判斷聊天是否結(jié)束 String s3; /得到其他窗口傳來的字符串 while( (s3=in.readLine().equals(n)&s3.equals(null)&s3.equals()/判斷s3是否為空 ,為空時等待 text6.setText(笑笑在線); /當連接成功是在用戶列表中 輸出用戶名字 if(!s3.equals(n)&!s3.equals(null)&!s3.equals()/s3不為空時做 text1.append(笑笑: +lab10.getText()+n );/在聊天記錄上添加文本 text1.append(s3+n); /將輸入的聊天內(nèi)容輸出在聊天記錄上 while(!s.equals(bye);/判斷是否結(jié)束 /關(guān)閉連接 out.close(); in.close(); socket.close(); catch(Exception e) /main函數(shù)public static void main(String args)new Login();/登錄實現(xiàn)4.2 Login()方法import java.awt.event.WindowAdapter ;import java.awt.event.ActionListener ;import java.awt.event.WindowEvent ;import java.awt.event.ActionEvent ;import java.awt.Color ;import jav

溫馨提示

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

評論

0/150

提交評論