Os exemplos deste artigo compartilham o código da sala de bate -papo Java para sua referência. O conteúdo específico é o seguinte
Principalmente envolvido no conhecimento
・ Escrita de programas de GUI em Java, incluindo mecanismo de escuta de eventos.
・ Java Network Communication Programming, ServerSocket e Socket Classes Use.
・ Programação com vários thread, classe de encadeamento e uso de interface executável em Java.
código -fonte
Cliente
Projeto de pacote1; importar java.awt.*; importar java.awt.event.*; importar java.io.*; importar java.net.*; importar javax.swing.*; public class Client {private JFrame ClientFrame; Privado Jlabel Iplabel; private Jlabel Portlabel; Jlabel privado dizlabel; Privado Jlabel Nicknamelabel; Private JTextfield IPTEXT; Private JTextField PortText; Private JTextfield NicknameText; Private JTextField SayStExt; Private JButton ConnectButton; Praente JButton NicknameButton; JButton privado SayButton; private JPanel Jpanelnorth; private JPanel Jpanelsouth0; Private Jpanel Jpanelsouth1; private JPanel Jpanelsouth2; private jtextarea clienttextarea; Scroller privado jscrollPane; Reader privado de bufferreader; escritor privado de impressão; apelido de string privada; public static void main (string args []) {cliente atlient = new client (); aclient.startup (); } // inicialize o componente public client () {apelido = "client"; clientFrame = new JFrame (); jpanelnorth = new jpanel (); Iplabel = new jlabel ("servidor ip", jlabel.left); IPtext = novo JTextfield (10); PortLabel = new jlabel ("porta do servidor", jlabel.left); PortText = novo 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 ("apelido", jlabel.left); nicknameText = new jtextfield (apelido, 30); apelidobutton = new jbutton ("confirm"); Saylabel = new Jlabel ("Mensagem", Jlabel.left); SayText = novo JTextfield (30); SayButton = New Jbutton ("Confirm"); } // construir gui private void BuildGui () {// Configurações da janela clientframe.settitle ("client"); clientFrame.SetDefaultCloseoperation (jframe.exit_on_close); clientFrame.SetSize (550, 550); // componente jpanelnorth.add (iPlabel); jpanelnorth.add (iPtext); jpanelnorth.add (PortLabel); jpanelnorth.add (PortText); jpanelnorth.add (ConnectButton); clientFrame.getContentPane (). Add (borderlayout.north, jpanelnorth); // o componente intermediário clienttextarea.setFocusable (false); scroller.setverticalScrollBarPolicy (scrollPaneConstants.vertical_scrollbar_always); scroller.SethorizontalsCrollBarPolicy (scrollPaneConstants.horizontal_scrollbar_never); clientFrame.getContentPane (). Add (borderlayout.center, roller); // componentes da área sul jpanelsouth1.add (Nicknamelabel); jpanelsouth1.add (nicknametext); jpanelsouth1.add (apelidobutton); 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); // defina a janela para ver clientframe.setVisible (true); } // o cliente executa public void startup () {BuildGui (); // O thread que recebe mensagens do servidor executável no IncomingReader = new Runnable () {@Override public void run () {string message; tente {while ((message = reader.readline ())! = null) {clienttextarea.append (mensagem + "/n"); }} catch (Exceção ex) {ex.PrintStackTrace (); }}}}; // Ouça o botão Connect para realizar a conexão do servidor conectbutton.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {string aserverip = iPtExt.getText (); string aserverport = PortTextText (); se (asserVip. JoptionPane.ShowsAghtialog (ClientFrame, "Digite o IP e a porta completos!"); BufferReader (StreamReaded); a entrada está correta. ");}}}}}); // Ouça o apelido e defina o apelido ActionListener NicknameListener = new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {string atext = nicknameText.getText (); if (! atext.equals ("")) {apelido = atext; }}}}; apenamebutton.addactionListener (nicknamelistener); nicknametext.addactionListener (nicknamelistener); nicknametext.addfocusListener (new focusListener () {@Override public void focuned (focusevent e) {} @Override public void focuslost (focusevent e) {string atext = nicknametext.getText (); if (! ATEXT.EQUALS ("") { // Envie uma mensagem para o servidor ActionListener SayListener = new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {string atext = SayText.getText (); if (atext.equals ("")) {joptionpane.showMessagedialog (clientFrame, "o conteúdo não pode estar vazio!"); } else {try {writer.println (apelido + ":" + atext); writer.flush (); } catch (Exceção ex) {ex.PrintStackTrace (); } SayText.Settext (""); }}}}; SayButton.addactionListener (Saylistener); saytext.addactionListener (SayListener); }} servidor
Projeto de pacote1; importar java.awt.*; importar java.awt.event.*; importar java.io.*; importar java.net.*; importar java.util.arraylist; importar java.util.iterator; importar javax.swing.*; Public Class Server {private JFrame ServerFrame; private Jlabel Portlabel; Jlabel privado dizlabel; Privado Jlabel Nicknamelabel; Private JTextField PortText; Private JTextField SayStExt; Private JTextfield NicknameText; Startbutton privado de JButton; JButton privado SayButton; Praente JButton NicknameButton; private JPanel Jpanelnorth; private JPanel Jpanelsouth0; Private Jpanel Jpanelsouth1; private JPanel Jpanelsouth2; Scroller privado jscrollPane; Private JTexTarea ServerTextarea; Private ArrayList <PrintWriter> clientOutputStreams; apelido de string privada; public static void main (string [] args) {server aserver = new Server (); aserver.startup (); } // inicialize o componente public server () {apelido = "servidor"; serverframe = new jframe (); jpanelnorth = new jpanel (); portLabel = new jlabel ("porta", jlabel.left); PortText = novo JTextfield (30); startButton = new jbutton ("start"); serverTexTarea = new JTexTarea (); scroller = new jscrollPane (serverTextarea); nicknamelabel = new jlabel ("apelido", jlabel.left); nicknameText = new jtextfield (apelido, 30); apelidobutton = new jbutton ("confirm"); jpanelsouth0 = new jpanel (); jpanelsouth1 = new jpanel (); jpanelsouth2 = new jpanel (); Saylabel = new Jlabel ("Mensagem", Jlabel.left); SayText = novo JTextfield (30); SayButton = New Jbutton ("Confirm"); } // construir GUI private void BuildGui () {// Configurações do Window ServerFrame.Settitle ("Server"); serverframe.setDefaultCloseoperation (jframe.exit_on_close); ServerFrame.SetSize (550, 550); // componentes da área norte jpanelnorth.add (PortLabel); jpanelnorth.add (PortText); jpanelnorth.add (startbutton); serverframe.getContentPane (). Add (borderlayout.north, jpanelnorth); // o componente intermediário serverTextarea.setFocusable (false); scroller.setverticalScrollBarPolicy (scrollPaneConstants.vertical_scrollbar_always); scroller.SethorizontalsCrollBarPolicy (scrollPaneConstants.horizontal_scrollbar_never); serverframe.getContentPane (). Add (borderlayout.center, roller); // componentes do distrito sul jpanelsouth1.add (Nicknamelabel); jpanelsouth1.add (nicknametext); jpanelsouth1.add (apelidobutton); jpanelsouth2.add (Saylabel); jpanelsouth2.add (SayText); jpanelsouth2.add (SayButton); JPanelsouth0.setLayout (New Boxlayout (JPanelsouth0, Boxlayout.Y_AXIS); JPanelsouth0.add (jpanelsouth1); jpanelsouth0.add (jpanelsouth2); serverframe.getentPane (). Serverframe.SetVible (true); (aport.equals ("")) {joptionpane.showmessagedialog (servidor, "digite o número da porta correta!"); ServerTexTarea.append ("Waiting for Client Connection .../N"); serverTextarea.append ("cliente conectado .../n"); PrintWriter Writer = new PrintWriter (clusterSocket.getOutputStream ()); clientOutputStreams.add (escritor); Thread t = novo thread (new clienthandler (clientes)); t.start (); }} catch (númeroFormatexception | ioexception e) {e.printStackTrace (); }}}}; Thread ServerThread = new Thread (ServerRunnable); serverthread.start (); } catch (Exceção ex) {ex.PrintStackTrace (); }}}}}; startbutton.addactionListener (startlistener); PortText.addactionListener (StartListener); // Ouça o apelido e defina o apelido ActionListener NicknameListener = new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {string atext = nicknameText.getText (); if (! atext.equals ("")) {apelido = atext; }}}; apenamebutton.addactionListener (nicknamelistener); nicknametext.addactionListener (nicknamelistener); nicknametext.addfocusListener (new focusListener () {@Override public void focuned (focusevent e) {} @Override public void focuslost (focusevent e) {string atext = nicknametext.getText (); if (! ATEXT.EQUALS ("") { // Ouça o botão Say e envie uma mensagem actionListener SayListener = new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {string atext = sayText.getText (); if (! atext.equals ("")) {atext = apelido + ":" + atext; SendToeveryclient (atext); ServerTexTarea.append (ATEXT + "/N"); SayText.Settext (""); } else {JoptionPane.showMessAgedialog (ServerFrame, "O conteúdo não pode estar vazio!"); }}}}; SayButton.addactionListener (Saylistener); saytext.addactionListener (SayListener); } // thread multi-client public clienthandler implementa Runnable {BufferredReader Breader; Soquete asket; public ClientHandler (Socket ClientSocket) {Try {ASocket = clientSocket; InputStreamReader isreader = new InputStreamReader (asocket.getInputStream ()); pão = new BufferredReader (isreader); } catch (Exceção ex) {ex.PrintStackTrace (); }} @Override public void run () {string message; tente {while ((message = paner.readline ())! = null) {sendtoeveryclient (mensagem); serverTexTarea.append (mensagem + "/n"); }} catch (Exceção ex) {ex.PrintStackTrace (); }}} // Método para enviar mensagens a todos os clientes privados void sendToeveryclient (mensagem de string) {iterator <PrintWriter> it = clientOutputStreams.iterator (); while (it.hasnext ()) {try {printWriter writer = (printWriter) it.next (); writer.println (mensagem); writer.flush (); } catch (Exceção ex) {ex.PrintStackTrace (); }}}}Captura de tela de corrida da GUI:
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.