This example for you to share the Java Chat Room code, for your reference, the specific contents are as follows
Mainly involved in knowledge
· Java GUI program writing, including event monitoring mechanism.
· Java network communication Programming, the use of serversocket,socket classes.
· Multi-Threading Programming in Java, Thread class, the use of runnable interfaces.
Source
Client
Package Project1;
Import java.awt.*;
Import java.awt.event.*;
Import java.io.*;
Import java.net.*;
Import javax.swing.*;
public class Client {private JFrame clientframe;
Private JLabel Iplabel;
Private JLabel Portlabel;
Private JLabel Saylabel;
Private JLabel Nicknamelabel;
Private JTextField Iptext;
Private JTextField Porttext;
Private JTextField Nicknametext;
Private JTextField Saytext;
Private JButton Connectbutton;
Private JButton Nicknamebutton;
Private JButton Saybutton;
Private JPanel Jpanelnorth;
Private JPanel JPanelSouth0;
Private JPanel jPanelSouth1;
Private JPanel jPanelSouth2;
Private JTextArea Clienttextarea;
Private JScrollPane scroller;
Private BufferedReader reader;
Private PrintWriter writer;
Private String nickname;
public static void Main (String args[]) {Client aclient = new Client ();
Aclient.startup ();
}//Initialize Component public client () {nickname = "client";
Clientframe = new JFrame (); JpanElnorth = new JPanel ();
Iplabel = new JLabel ("Server IP", jlabel.left);
Iptext = new JTextField (10);
Portlabel = new JLabel ("Server Port", jlabel.left);
Porttext = new JTextField (10);
Connectbutton = new JButton ("Connection");
Clienttextarea = new JTextArea ();
Scroller = new JScrollPane (Clienttextarea);
JPanelSouth0 = new JPanel ();
JPanelSouth1 = new JPanel ();
JPanelSouth2 = new JPanel ();
Nicknamelabel = new JLabel ("nickname", Jlabel.left);
Nicknametext = new JTextField (nickname, 30);
Nicknamebutton = new JButton ("Confirm");
Saylabel = new JLabel ("message", Jlabel.left);
Saytext = new JTextField (30);
Saybutton = new JButton ("Confirm");
///Build GUI private void Buildgui () {//Window settings Clientframe.settitle ("Client");
Clientframe.setdefaultcloseoperation (Jframe.exit_on_close);
Clientframe.setsize (550, 550);
North of the Component Jpanelnorth.add (Iplabel);
Jpanelnorth.add (Iptext);
Jpanelnorth.add (Portlabel);
Jpanelnorth.add (Porttext); Jpanelnorth.add (connectbutton);
Clientframe.getcontentpane (). Add (Borderlayout.north, Jpanelnorth);
The middle component clienttextarea.setfocusable (false);
Scroller.setverticalscrollbarpolicy (scrollpaneconstants.vertical_scrollbar_always);
Scroller.sethorizontalscrollbarpolicy (Scrollpaneconstants.horizontal_scrollbar_never);
Clientframe.getcontentpane (). Add (Borderlayout.center, scroller);
The Southern Component Jpanelsouth1.add (Nicknamelabel);
Jpanelsouth1.add (Nicknametext);
Jpanelsouth1.add (Nicknamebutton);
Jpanelsouth2.add (Saylabel);
Jpanelsouth2.add (Saytext);
Jpanelsouth2.add (Saybutton);
Jpanelsouth0.setlayout (New BoxLayout (JPanelSouth0, Boxlayout.y_axis));
Jpanelsouth0.add (JPANELSOUTH1);
Jpanelsouth0.add (JPANELSOUTH2);
Clientframe.getcontentpane (). Add (Borderlayout.south, JPanelSouth0);
The Set window is visible clientframe.setvisible (true);
//client runs public void StartUp () {Buildgui (); The thread that received the server message Runnable Incomingreader = new Runnable () {@Override publicvoid Run () {String message;
try {while (message = Reader.readline ())!= null) {clienttextarea.append (message + "\ n");
} catch (Exception ex) {ex.printstacktrace ();
}
}
}; Monitor the Connect button to implement the server's connection Connectbutton.addactionlistener (new ActionListener () {@Override public void Actionperf
Ormed (ActionEvent e) {String Aserverip = Iptext.gettext ();
String Aserverport = Porttext.gettext (); if (Aserverip.equals ("") | | Aserverport.equals ("")) {Joptionpane.showmessagedialog (clientframe, "Please enter the full IP and port!")
"); else {try {@SuppressWarnings ("resource") socket Clientsocket = new socket (Aserverip, Integer.parse
Int (Aserverport));
InputStreamReader StreamReader = new InputStreamReader (Clientsocket.getinputstream ());
reader = new BufferedReader (StreamReader);
writer = new PrintWriter (Clientsocket.getoutputstream ());
Clienttextarea.append ("server is connected ... \ n");
Thread readerthread = new Thread (incomingreader);
Readerthread.start (); The catch (Exception ex) {Joptionpane.showmessagedialog (clientframe) is not connected to the server!\n verify that the IP and port inputs are correct.
");
}
}
}
}); Monitor nickname, set nickname ActionListener Nicknamelistener = new ActionListener () {@Override public void Actionperform
Ed (ActionEvent e) {String atext = Nicknametext.gettext ();
if (!atext.equals ("")) {nickname = Atext;
}
}
};
Nicknamebutton.addactionlistener (Nicknamelistener);
Nicknametext.addactionlistener (Nicknamelistener);
Nicknametext.addfocuslistener (New Focuslistener () {@Override public void focusgained (FocusEvent e) {}
@Override public void Focuslost (FocusEvent e) {String atext = Nicknametext.gettext ();
if (!atext.equals ("")) {nickname = Atext;
}
}
}); Send message to server ActionListener Saylistener = new ActionListener () {@Override public void actIonperformed (ActionEvent e) {String atext = Saytext.gettext (); if (Atext.equals (")) {Joptionpane.showmessagedialog (clientframe," content cannot be empty!)
");
else {try {writer.println (nickname + ":" + atext);
Writer.flush ();
catch (Exception ex) {ex.printstacktrace ();
} saytext.settext ("");
}
}
};
Saybutton.addactionlistener (Saylistener);
Saytext.addactionlistener (Saylistener);
}
}
Server
Package Project1;
Import java.awt.*;
Import java.awt.event.*;
Import java.io.*;
Import java.net.*;
Import java.util.ArrayList;
Import Java.util.Iterator;
Import javax.swing.*;
public class Server {private JFrame serverframe;
Private JLabel Portlabel;
Private JLabel Saylabel;
Private JLabel Nicknamelabel;
Private JTextField Porttext;
Private JTextField Saytext;
Private JTextField Nicknametext;
Private JButton Startbutton;
Private JButton Saybutton;
Private JButton Nicknamebutton;
Private JPanel Jpanelnorth;
Private JPanel JPanelSouth0;
Private JPanel jPanelSouth1;
Private JPanel jPanelSouth2;
Private JScrollPane scroller;
Private JTextArea Servertextarea;
Private arraylist<printwriter> Clientoutputstreams;
Private String nickname;
public static void Main (string[] args) {Server aserver = new server ();
Aserver.startup ();
}//Initialize Component Public server () {nickname = "Server";
Serverframe = new JFrame (); Jpanelnorth = new JPanel ();
Portlabel = new JLabel ("Port", jlabel.left);
Porttext = new JTextField (30);
Startbutton = new JButton ("Start");
Servertextarea = new JTextArea ();
Scroller = new JScrollPane (Servertextarea);
Nicknamelabel = new JLabel ("nickname", Jlabel.left);
Nicknametext = new JTextField (nickname, 30);
Nicknamebutton = new JButton ("Confirm");
JPanelSouth0 = new JPanel ();
JPanelSouth1 = new JPanel ();
JPanelSouth2 = new JPanel ();
Saylabel = new JLabel ("message", Jlabel.left);
Saytext = new JTextField (30);
Saybutton = new JButton ("Confirm");
///Build GUI private void Buildgui () {//Window settings serverframe.settitle ("Server");
Serverframe.setdefaultcloseoperation (Jframe.exit_on_close);
Serverframe.setsize (550, 550);
North of the Component Jpanelnorth.add (Portlabel);
Jpanelnorth.add (Porttext);
Jpanelnorth.add (Startbutton);
Serverframe.getcontentpane (). Add (Borderlayout.north, Jpanelnorth);
The middle component servertextarea.setfocusable (false); Scroller.setvertIcalscrollbarpolicy (scrollpaneconstants.vertical_scrollbar_always);
Scroller.sethorizontalscrollbarpolicy (Scrollpaneconstants.horizontal_scrollbar_never);
Serverframe.getcontentpane (). Add (Borderlayout.center, scroller);
The Southern Component Jpanelsouth1.add (Nicknamelabel);
Jpanelsouth1.add (Nicknametext);
Jpanelsouth1.add (Nicknamebutton);
Jpanelsouth2.add (Saylabel);
Jpanelsouth2.add (Saytext);
Jpanelsouth2.add (Saybutton);
Jpanelsouth0.setlayout (New BoxLayout (JPanelSouth0, Boxlayout.y_axis));
Jpanelsouth0.add (JPANELSOUTH1);
Jpanelsouth0.add (JPANELSOUTH2);
Serverframe.getcontentpane (). Add (Borderlayout.south, JPanelSouth0);
The Set window is visible serverframe.setvisible (true);
}//server running public void StartUp () {Buildgui (); Monitor the Start button to establish the port ActionListener Startlistener = new ActionListener () {@Override public void actionperformed (A
Ctionevent e) {clientoutputstreams = new arraylist<printwriter> (); String Aport = Porttext.getText (); if (Aport.equals (")) {Joptionpane.showmessagedialog (serverframe, please enter the correct port number!)
"); ' Else {try {//thread waiting for client to connect Runnable serverrunnable = new Runnable () {@Override Publ
IC void Run () {ServerSocket serversocket;
try {serversocket = new ServerSocket (Integer.parseint (Aport));
Servertextarea.append ("Waiting for client to connect ... \ n");
while (true) {Socket clientsocket = serversocket.accept ();
Servertextarea.append ("Client connected ... \ n");
PrintWriter writer = new PrintWriter (Clientsocket.getoutputstream ());
Clientoutputstreams.add (writer);
Thread t = new Thread (new ClientHandler (Clientsocket));
T.start (); catch (NumberFormatException |
IOException e) {e.printstacktrace ();
}
}
};
Thread serverthread = new Thread (serverrunnable);
Serverthread.start (); catch (ExCeption ex) {ex.printstacktrace ();
}
}
}
};
Startbutton.addactionlistener (Startlistener);
Porttext.addactionlistener (Startlistener); Monitor nickname, set nickname ActionListener Nicknamelistener = new ActionListener () {@Override public void Actionperform
Ed (ActionEvent e) {String atext = Nicknametext.gettext ();
if (!atext.equals ("")) {nickname = Atext;
}
}
};
Nicknamebutton.addactionlistener (Nicknamelistener);
Nicknametext.addactionlistener (Nicknamelistener);
Nicknametext.addfocuslistener (New Focuslistener () {@Override public void focusgained (FocusEvent e) {}
@Override public void Focuslost (FocusEvent e) {String atext = Nicknametext.gettext ();
if (!atext.equals ("")) {nickname = Atext;
}
}
}); Listen for say button, send message ActionListener Saylistener = new ActionListener () {@Override public void actionperformed (actio Nevent e) {String atext = saytext.gEttext ();
if (!atext.equals ("")) {atext = nickname + ":" + atext;
Sendtoeveryclient (Atext);
Servertextarea.append (atext + "\ n");
Saytext.settext (""); else {Joptionpane.showmessagedialog (serverframe, "content cannot be empty!)
");
}
}
};
Saybutton.addactionlistener (Saylistener);
Saytext.addactionlistener (Saylistener);
}//Multi-client thread public class ClientHandler implements Runnable {BufferedReader breader;
Socket Asocket;
Public ClientHandler (Socket clientsocket) {try {asocket = Clientsocket;
InputStreamReader Isreader = new InputStreamReader (Asocket.getinputstream ());
Breader = new BufferedReader (Isreader);
catch (Exception ex) {ex.printstacktrace ();
@Override public void Run () {String message;
try {while (message = Breader.readline ())!= null) {sendtoeveryclient (message);
Servertextarea.append (message + "\ n");
} catch (Exception ex) { Ex.printstacktrace (); }}//Send message to all clients private void sendtoeveryclient (String message) {iterator<printwriter> it = CLI
Entoutputstreams.iterator ();
while (It.hasnext ()) {try {printwriter writer = (PrintWriter) it.next ();
WRITER.PRINTLN (message);
Writer.flush ();
catch (Exception ex) {ex.printstacktrace ();
}
}
}
}
GUI Run screenshot:
The above is the entire content of this article, I hope to help you learn, but also hope that we support the cloud habitat community.