Les exemples de cet article partagent le code de la salle de chat Java pour votre référence. Le contenu spécifique est le suivant
Principalement impliqué dans les connaissances
・ L'écriture des programmes GUI en Java, y compris le mécanisme d'écoute des événements.
・ Java Network Communication Programming, Serversocket et Socket Classes Utilisation.
・ Programmation multi-thread, classe de threads et utilisation d'interface exécutable dans Java.
code source
Client
Package Project1; import java.awt. *; import java.awt.event. *; importer java.io. *; importer java.net. *; importer javax.swing. *; Client de classe publique {private jFrame ClientFrame; JLABEL privé Iplabel; Jlabel privé Portlabel; JLABEL PRIVÉ SAIDLABEL; JLABEL PRIVÉE NICKNAMELABEL; jtexfield privé ipText; PRIVÉ JTEXFIELD PORTTEXT; Jtextfield privé NicknameText; Jtexfield privé SaySext; JBUTTON CONNECTBUTTON privé; Private Jbutton surnombutton; Le soldat Jbutton Saysbutton; Jpanel privé Jpanelnorth; Jpanel privé Jpanelsouth0; Jpanel privé Jpanelsouth1; Jpanel privé Jpanelsouth2; JEXTAREA PRIVATE CLIENTTextArea; Scroller privé jscrollpane; lecteur privé BufferedReader; écrivain privé de gravure; surnom de cordes privées; public static void main (String args []) {client aclient = new client (); aclient.startup (); } // Initialiser le composant public Client () {Nontes de surface = "Client"; clientFrame = new JFrame (); jpanelnorth = new JPanel (); Iplabel = new JLabel ("Server ip", jLabel.left); IpText = new JTextField (10); PortLabel = new JLabel ("Port serveur", jLabel.left); PortText = new JTextField (10); connectButton = new JButton ("connexion"); clientTextArea = new JTextArea (); Scroller = new JscrollPane (clientTextArea); jpanelsouth0 = new JPanel (); jpanelsouth1 = new JPanel (); jpanelsouth2 = new jpanel (); nicknameLabel = new JLabel ("surnom", jlabel.left); nicknameText = new JTextfield (surnom, 30); SurnomButton = new JBUTTON ("Confirmer"); SayLabel = new JLabel ("Message", JLabel.Left); SayText = new JTextField (30); SayButton = new JBUTTON ("Confirmer"); } // build GUI private void buildGui () {// Paramètres de la fenêtre clientFrame.SetTitle ("client"); clientFrame.setDefaultCloseOperation (jframe.exit_on_close); ClientFrame.SetSize (550, 550); // Composant jpanelnorth.add (iPLabel); jpanelnorth.add (ipText); jpanelnorth.add (Portlabel); jpanelnorth.add (porttext); jpanelnorth.add (ConnectButton); clientFrame.getContentPane (). Add (borderLayout.north, jpanelnorth); // le composant intermédiaire clientTextArea.setFocUsable (false); Scroller.SetVerticalScrollBarPolicy (ScrollPanEconstants.vertical_Scrollbar_Always); Scroller.SethorizontalsCrollBarpolicy (ScrollPanEconstants.Horizontal_ScrollBar_Never); clientFrame.getContentPane (). Add (borderLayout.Center, Scroller); // Composants de la zone sud JPanelsouth1.add (NicknameLabel); jpanelsouth1.add (nicknameText); jpanelsouth1.add (surnombutton); 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); // Définissez la fenêtre pour voir ClientFrame.SetVisible (true); } // Le client exécute public void startup () {buildGui (); // Le thread qui reçoit des messages de serveur Runnable incominReader = new runnable () {@Override public void run () {String Message; essayez {while ((message = reader.readline ())! = null) {clientTextArea.append (message + "/ n"); }} catch (exception ex) {ex.printStackTrace (); }}}}; // Écoutez le bouton Connect pour réaliser la connexion du serveur ConnectButton.AdDactionListener (new ActionListener () {@Override public void Actionperformed (ActionEvent e) {String AserVerip = ipText.getText (); String Aserverport = portText.GetText (); if (aserverrip.equal JOPTIONPANE.SHOWMESSAGEDIALOG (ClientFrame, veuillez saisir l'IP et le port! BufferedReader (StreamReader); IP et l'entrée du port sont correctes. ");}}}}}); // Écoutez le surnom et définissez le surnom d'action lister nicknameListener = new ActionListener () {@Override public void ActionperFormed (ActionEvent e) {String atext = nicknameText.getText (); if (! Atext.equals ("")) {Nontes de surnom = atext; }}}}; walknamebutton.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;}}}); // Envoyez un message au serveur ActionListener SayListener = new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {String Atext = SayText.GetText (); if (atext.equals ("")) {joptionpane.showMessageDialog (clientFrame, "Le contenu ne peut pas être vide!"); } else {try {writer.println (surnom + ":" + atext); écrivain.flush (); } catch (exception ex) {ex.printStackTrace (); } SayText.SeTText (""); }}}}; SayButton.AddactionListener (SayListener); SayText.AddactionListener (SayListener); }} serveur
Package Project1; import java.awt. *; import java.awt.event. *; importer java.io. *; importer java.net. *; import java.util.arraylist; Importer java.util.iterator; importer javax.swing. *; public class Server {private jFrame ServerFrame; Jlabel privé Portlabel; JLABEL PRIVÉ SAIDLABEL; JLABEL PRIVÉE NICKNAMELABEL; PRIVÉ JTEXFIELD PORTTEXT; Jtexfield privé SaySext; Jtextfield privé NicknameText; Private Jbutton Startbutton; Le soldat Jbutton Saysbutton; Private Jbutton surnombutton; Jpanel privé Jpanelnorth; Jpanel privé Jpanelsouth0; Jpanel privé Jpanelsouth1; Jpanel privé Jpanelsouth2; Scroller privé jscrollpane; JEXTAREA PRIVÉE ServerTextArea; Private ArrayList <RictWriter> ClientoutputStreams; surnom de cordes privées; public static void main (String [] args) {server aserver = new server (); aserver.startup (); } // Initialiser le composant public Server () {Nontes de surface = "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 ("surnom", jlabel.left); nicknameText = new JTextfield (surnom, 30); SurnomButton = new JBUTTON ("Confirmer"); jpanelsouth0 = new JPanel (); jpanelsouth1 = new JPanel (); jpanelsouth2 = new jpanel (); SayLabel = new JLabel ("Message", JLabel.Left); SayText = new JTextField (30); SayButton = new JBUTTON ("Confirmer"); } // build GUI private void buildGui () {// Paramètres de la fenêtre serverframe.setTitle ("server"); serverframe.setDefaultCloseOperation (jframe.exit_on_close); ServerFrame.SetSize (550, 550); // composants de la zone nord jpanelnorth.add (Portlabel); jpanelnorth.add (porttext); jpanelnorth.add (startbutton); serverframe.getContentPane (). Add (borderLayout.north, jpanelnorth); // le composant intermédiaire serverTextArea.setFocUsable (false); Scroller.SetVerticalScrollBarPolicy (ScrollPanEconstants.vertical_Scrollbar_Always); Scroller.SethorizontalsCrollBarpolicy (ScrollPanEconstants.Horizontal_ScrollBar_Never); serverframe.getContentPane (). Add (borderLayout.Center, Scroller); // Composants du district sud Jpanelsouth1.add (NicknameLabel); jpanelsouth1.add (nicknameText); jpanelsouth1.add (surnombutton); 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); / / sèche la fenêtre pour voir ServerFrame. } // Le serveur exécute public void startup () {buildGui (); JOptionPane.showMessagedIalog (server connexion ... / n "); while (true) {socket clientSocket = serveSocket.Accept (); serverTextArea.Apend ("Client Connected ... / n"); Printwriter writer = new PrintWriter (clients.getOutputStream ()); ClientOutputStreams.Add (écrivain); Thread t = new thread (new ClientHandler (clientSocket)); t.start (); }} catch (NumberFormatexception | ioException e) {e.printStackTrace (); }}}}; Thread ServerThread = nouveau thread (serverRunnable); serverthread.start (); } catch (exception ex) {ex.printStackTrace (); }}}}}; startButton.addactionListener (startListener); porttext.addactionListener (startListener); // Écoutez le surnom et définissez le surnom d'action lister nicknameListener = new ActionListener () {@Override public void ActionperFormed (ActionEvent e) {String atext = nicknameText.getText (); if (! Atext.equals ("")) {Nontes de surnom = atext; }}}; walknamebutton.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;}}}); // Écoutez le bouton Say et envoyez un message ActionListener SayListener = new ActionListener () {@Override public void ActionperFormed (ActionEvent e) {String Atext = SayText.getText (); if (! atext.equals ("")) {atext = newname + ":" + atext; SendToeveryClient (atext); serverTextArea.append (atext + "/ n"); SayText.SeTText (""); } else {joptionpane.showMessageDialog (serverframe, "Le contenu ne peut pas être vide!"); }}}}; SayButton.AddactionListener (SayListener); SayText.AddactionListener (SayListener); } // Fil de fil multi-client Classe publique ClientHandler implémente Runnable {BufferedReader Baigner; Socket asocket; public ClientHandler (socket clientSocket) {try {Asocket = ClientSocket; InputStreamReader IsReader = new inputStreamReader (asocket.getInputStream ()); Bénéfice = nouveau BufferedReader (IsReader); } catch (exception ex) {ex.printStackTrace (); }} @Override public void run () {String Message; essayez {while ((message = adiceer.readline ())! = null) {sendtoeveryClient (message); serverTextArea.append (message + "/ n"); }} catch (exception ex) {ex.printStackTrace (); }}} // Méthode pour envoyer des messages à tous les clients privé void SendToEveryClient (message de chaîne) {Iterator <RintRwriter> it = clientoutputStreams.Itator (); while (it.hasnext ()) {try {printwriter writer = (printwriter) it.next (); écrivain.println (message); écrivain.flush (); } catch (exception ex) {ex.printStackTrace (); }}}}Capture d'écran de GUI Running:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.