Die Beispiele in diesem Artikel teilen den Java -Chatraumcode für Ihre Referenz. Der spezifische Inhalt ist wie folgt
Hauptsächlich am Wissen beteiligt
・ Schreiben von GUI -Programmen in Java, einschließlich Event -Hörmechanismus.
・ Java -Netzwerkkommunikationsprogrammierung, Serversocket und Socket -Klassen verwenden.
・ Multi-Thread-Programmierung, Thread-Klasse und Runnable-Schnittstelle in Java.
Quellcode
Kunde
Paketprojekt1; import Java.awt.*; import Java.awt.event.*; import Java.io.*; Java.net importieren.*; Javax.swing importieren.*; öffentlicher Klassen Client {private JFrame ClientFrame; Privat Jlabel Iplabel; Privat Jlabel Portlabel; Private Jlabel sagt Label; Privat Jlabel Nicknamelabel; private jtextfield iptext; private jTextfield portText; private jtextfield nicknameText; Private JTextfield SayStext; Privat Jbutton Connectbutton; Privat Jbutton Nicknamebutton; Privat Jbutton sagtbutton; Privat Jpanel Jpanelnorth; Privat Jpanel Jpanelsouth0; Privat Jpanel Jpanelsouth1; Privat Jpanel Jpanelsouth2; private jtextArea clientTextArea; Privat Jscrollpane Scroller; privater BufferedReader -Leser; privater Prinkerschreiber; privater String -Spitzname; public static void main (String args []) {client aclient = new Client (); Aclient.Startup (); } // Initialisieren Sie die Komponente public Client () {Spickname = "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 ("Verbindung"); clientTextArea = new JTextArea (); scroller = new JscrollPane (ClientTextArea); jpanelsouth0 = new jpanel (); jpanelSouth1 = new jpanel (); jpanelsouth2 = new jpanel (); Nicknamelabel = new Jlabel ("Spitzname", jlabel.left); Nicknametext = new JTextField (Spitzname, 30); spicknamebutton = new Jbutton ("bestätigen"); SayLabel = new Jlabel ("Nachricht", jlabel.left); SayText = new JTextField (30); saybutton = new Jbutton ("bestätigen"); } // GUI Private void BuildGui () {// Einstellungen des Fenster ClientFrame.Settitle ("Client"); ClientFrame.SetDefaultCloseOperation (jframe.exit_on_close); ClientFrame.SetSize (550, 550); // Komponente jpanelnorth.add (iPlabel); jpanelnorth.add (iptext); jpanelnorth.add (portlabel); jpanelnorth.add (portText); jpanelnorth.add (Connectbutton); ClientFrame.getContentPane (). add (borderLayout.north, jpanelnorth); // die Zwischenkomponenten clientTextArea.setfocuSable (false); scroller.setverticalScrollBarpolicy (ScrollPaneConstants.vertical_ScrollBar_always); scroller.sethorizontalscrollbarpolicy (ScrollPaneConstants.Horizontal_ScrollBar_Never); ClientFrame.getContentPane (). add (borderLayout.Center, Scroller); // Komponenten der südlichen Region jpanelsouth1.add (Nicknamelabel); jpanelsouth1.add (Nicknametext); jpanelsouth1.add (Spicknamebutton); Jpanelsouth2.Add (Saylabel); jpanelsouth2.add (SayText); Jpanelsouth2.Add (Saybutton); jpanelsouth0.setLayout (neuer BoxLayout (jpanelsouth0, boxLayout.y_axis)); jpanelsouth0.add (jpanelsouth1); jpanelsouth0.add (jpanelsouth2); ClientFrame.getContentPane (). add (BorderLayout.South, JPanelsouth0); // Setzen Sie das Fenster, um ClientFrame.setVisible (true) anzuzeigen. } // Der Client führt public void startup () {BuildGui () aus; // Der Thread, der Servermeldungen empfängt, runnable IncomingReader = new Runnable () {@Override public void run () {String -Nachricht; try {while ((messy = reader.readline ())! }} catch (Ausnahme ex) {ex.printstacktrace (); }}}}; // Hören Sie sich die Schaltfläche "Connect" an, um die Verbindung des Servers Connectbutton.AddactionListener (neuer ActionListener () {@Override public void actionPerformed (actionEvent e) {String AServerip = iptext.gettext (); String AserVent = Porttext.getText (); JOPTIONPANE.SHOWMESSAGEILOG (ClientFrame, "Bitte geben Sie die vollständige IP ein!"); Bufferader (streamReader); dass die IP- und Porteingabe korrekt sind. ");}}}}}); // Spitzname anhören und den Spitznamen ActionListener Spicknamelistener = new ActionListener () {@Override public void actionPerformed (actionEvent e) {String text = nicknameText.getText (); if (! text.equals ("") {spitzname = text; }}}}; Nicknamebutton.AddactionListener (Nicknamelistener); Nicknametext.AddactionListener (Nicknamelistener); Nicknametext.AddfocusListener (neuer FocusListener () {@Override public void focusgained (focusevent e) {} @Override public void focusLost (focusevent e) {String text = nicknametext.getText (); if (! Atetexte.Atexte (") {") {") {{{Nickname; // Senden Sie eine Nachricht an den Server ActionListener SayListener = new ActionListener () {@Override public void actionPerformed (actionEvent e) {String text = sayText.getText (); if (text.equals ("") {joptionpane.showMessagedialog (ClientFrame, "Der Inhalt kann nicht leer sein!"); } else {try {writer.println (Spitzname + ":" + text); writer.flush (); } catch (Ausnahme ex) {ex.printstacktrace (); } sayText.setText (""); }}}}; saybutton.addactionListener (SayListener); SayText.AddactionListener (SayListener); }} Server
Paketprojekt1; import Java.awt.*; import Java.awt.event.*; import Java.io.*; Java.net importieren.*; Import Java.util.ArrayList; Import Java.util.iterator; Javax.swing importieren.*; öffentlicher Klassenserver {private JFrame Serverframe; Privat Jlabel Portlabel; Private Jlabel sagt Label; Privat Jlabel Nicknamelabel; private jTextfield portText; Private JTextfield SayStext; private jtextfield nicknameText; Privat Jbutton Startbutton; Privat Jbutton sagtbutton; Privat Jbutton Nicknamebutton; Privat Jpanel Jpanelnorth; Privat Jpanel Jpanelsouth0; Privat Jpanel Jpanelsouth1; Privat Jpanel Jpanelsouth2; Privat Jscrollpane Scroller; private jTextArea servertextArea; private ArrayList <PRINKRITER> clientOutputStreams; privater String -Spitzname; public static void main (String [] args) {Server Aserver = new Server (); Aserver.startup (); } // Initialisieren Sie die Komponente public Server () {Spickname = "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 ("Spitzname", jlabel.left); Nicknametext = new JTextField (Spitzname, 30); spicknamebutton = new Jbutton ("bestätigen"); jpanelsouth0 = new jpanel (); jpanelSouth1 = new jpanel (); jpanelsouth2 = new jpanel (); SayLabel = new Jlabel ("Nachricht", jlabel.left); SayText = new JTextField (30); saybutton = new Jbutton ("bestätigen"); } // GUI Private void BuildGui () {// Einstellungen des Fenster serverframe.settitle ("Server"); serverframe.setDefaultCloseOperation (jframe.exit_on_close); serverframe.setSize (550, 550); // Komponenten der North Area jpanelnorth.add (Portlabel); jpanelnorth.add (portText); jpanelnorth.add (startbutton); serverframe.getContentPane (). add (borderLayout.north, jpanelnorth); // die Zwischenkomponenten servertextarea.setfocuSable (False); scroller.setverticalScrollBarpolicy (ScrollPaneConstants.vertical_ScrollBar_always); scroller.sethorizontalscrollbarpolicy (ScrollPaneConstants.Horizontal_ScrollBar_Never); serverframe.getContentPane (). add (borderLayout.Center, Scroller); // Komponenten des South District Jpanelsouth1.Add (Nicknamelabel); jpanelsouth1.add (Nicknametext); jpanelsouth1.add (Spicknamebutton); Jpanelsouth2.Add (Saylabel); jpanelsouth2.add (SayText); Jpanelsouth2.Add (Saybutton); jpanelsouth0.setLayout (neuer BoxLayout (jpanelsouth0, boxLayout.y_axis); serverframe.setvisible (true); (aport.equals ("") {joptionpane.showMessagedialog (Serverframe, "Bitte geben Sie die richtige Portnummer ein!"); ServerSocket (Integer.ParseInt (aPort)); serverTextArea.Append ("Client Connected .../n"); Printwriter writer = neuer printwriter (Clientsocket.getOutputStream ()); ClientOutputStreams.Add (Schriftsteller); Thread t = neuer Thread (neuer ClientHandler (ClientSocket)); t.start (); }} catch (numberFormatexception | ioException e) {e.printstacktrace (); }}}}; Thread thread = neuer Thread (ServerRunnable); serverthread.start (); } catch (Ausnahme ex) {ex.printstacktrace (); }}}}}; startbutton.addactionListener (startListener); portText.addactionListener (startListener); // Spitzname anhören und den Spitznamen ActionListener Spicknamelistener = new ActionListener () {@Override public void actionPerformed (actionEvent e) {String text = nicknameText.getText (); if (! text.equals ("") {spitzname = text; }}}; Nicknamebutton.AddactionListener (Nicknamelistener); Nicknametext.AddactionListener (Nicknamelistener); Nicknametext.AddfocusListener (neuer FocusListener () {@Override public void focusgained (focusevent e) {} @Override public void focusLost (focusevent e) {String text = nicknametext.getText (); if (! Atetexte.Atexte (") {") {") {{{Nickname; // Hören Sie sich die Schaltfläche Say an und senden Sie eine Nachricht actionListener SayListener = new ActionListener () {@Override public void actionPerformed (actionEvent e) {String text = SayText.GeteText (); if (! text.equals ("") {text = spickname + ":" + text; sendToeveryclient (Atetext); serverTextArea.Append (text + "/n"); SayText.setText (""); } else {joptionPane.showMessagedialog (Serverframe, "Der Inhalt kann nicht leer sein!"); }}}}; saybutton.addactionListener (SayListener); SayText.AddactionListener (SayListener); } // Multi-Client-Thread öffentliche Klasse ClientHandler implementiert Runnable {BufferedReader Breader; Steckdose Asocket; public ClientHandler (Socket ClientSocket) {try {asocket = ClientSocket; InputStreamReader isReader = new InputStreamReader (asocket.getInputStream ()); breader = neuer bufferedReader (isReader); } catch (Ausnahme ex) {ex.printstacktrace (); }} @Override public void run () {String -Nachricht; try {while ((message = breader.readline ())! = null) {sendToeveryclient (message); serverTextArea.Append (message + "/n"); }} catch (Ausnahme ex) {ex.printstacktrace (); }}} // Methode zum Senden von Nachrichten an alle Clients private void sendToeveryclient (String -Nachricht) {Iterator <PRINKRITER> IT = clientOutputStreams.iterator (); while (it.hasnext ()) {try {printwriter writer = (printwriter) it.next (); writer.println (Nachricht); writer.flush (); } catch (Ausnahme ex) {ex.printstacktrace (); }}}}GUI laufende Screenshot:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.