Примеры в этой статье делятся кодом чата Java для вашей ссылки. Конкретный контент заключается в следующем
В основном участвует в знаниях
・ Написание программ GUI на Java, включая механизм прослушивания событий.
・ Используют программы коммуникации сети Java.
・ Многопоточное программирование, класс потоков и использование используемого интерфейса в Java.
исходный код
Клиент
Пакет Project1; Импорт java.awt.*; импортировать java.awt.event.*; импортировать java.io.*; Импорт java.net.*; импортировать javax.swing.*; Public Class Client {private JFrame ClientFrame; Частный Jlabel Iplabel; частная Jlabel Portlabel; Частный Jlabel говорит Label; Частный Jlabel Picknamelabel; Private JTextfield IPText; Private Jtextfield PortText; Private Jtextfield Nicknametext; Private JTextfield SayStext; Частный Jbutton Connectbutton; Частный jbutton chicnamebutton; Частный JButton говорит, что; Частный JPanel JPanelnorth; Частный JPanel JPanelsouth0; Частный JPanel JPanelsouth1; Частный JPanel JPanelsouth2; private jtextarea clientTextarea; Частный JScrollpane Scroller; Частный читатель BufferedReader; Частный писатель печати; Приватный прозвище; public static void main (string args []) {client aclient = new Client (); aclient.startup (); } // Инициализировать компонент public client () {nickname = "client"; clientFrame = new jFrame (); jpanelnorth = new jpanel (); Iplabel = new jlabel ("сервер IP", jlabel.left); Iptext = new Jtextfield (10); Portlabel = new jlabel ("серверный порт", 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 («Прозвище», jlabel.left); nicknametext = new Jtextfield (ник, 30); nicknamebutton = new Jbutton ("Подтверждение"); saylabel = new jlabel ("Сообщение", jlabel.left); SAYTEXT = новый JTextfield (30); saybutton = new Jbutton ("Подтвердить"); } // Создание GUI Private void buildGui () {// Настройки Window clientFrame.setTitle ("client"); clientFrame.setDefaultCloseoPeration (jframe.exit_on_close); clientFrame.setSize (550, 550); // компонент jpanelnorth.add (iplabel); jpanelnorth.add (iptext); jpanelnorth.add (portlabel); jpanelnorth.add (porttext); jpanelnorth.add (connectbutton); clientFrame.getContentPane (). Add (borderlayout.north, jpanelnorth); // промежуточный компонент clientTextArea.setFocusable (false); scroller.setverticalscrollbarpolicy (scrollpaneconstants.vertical_scrollbar_always); scroller.sethorizontalscrollbarpolicy (scrollpaneconstants.horizontal_scrollbar_never); clientFrame.getContentPane (). Add (Borderlayout.center, Scroller); // Компоненты Южной области jPanelsouth1.add (Протекание); jpanelsouth1.add (Nicknametext); jpanelsouth1.add (никнамбаттон); 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); // Установить окно, чтобы увидеть clientFrame.setVisible (true); } // Клиент запускает public void startup () {buildGui (); // Поток, который получает сообщения сервера, runnable outmentReader = new Runnable () {@Override public void run () {String message; try {while ((message = reader.readline ())! = null) {clientTextArea.Append (сообщение + "/n"); }} catch (Exception ex) {ex.printstackTrace (); }}}}; // Слушайте кнопку Connect, чтобы реализовать подключение сервера ConnectButton.AdcationListener (new ActionListener () {@Override public void actionPerformed (actionEvent e) {string aserVerip = iptext.getText (); string aserverport = porttext.getText (); if (aserverip.equals (") || Joptionpane.showmessageedialog (ClientFrame, «Пожалуйста, введите полный IP и порт!»); BufferedReader (StreamReader); верны. ");}}}}}); // Слушайте никнам и установите Neckname ActionListener Nicknamelistener = new ActionListener () {@Override public void ActionPerformed (actionEvent e) {String atext = nicknametext.getText (); if (! atext.equals ("" ")) {nickname = atext; }}}}; chicnamebutton.addactionListener (Plancnamelistener); nicknametext.addactionListener (picknamelistener); nicknametext.addfocuslistener (new FocusListener () {@Override public void Focusgisted (focuseVent e) {} @Override public void фокусировка (FocuseVent e) {string atext = nicknametext.getText (); if (! atext.equals (")) {nickname = atext; // Отправить сообщение на сервер ActionListener sayListener = new ActionListener () {@Override public void actionPerformed (actionEvent e) {string atext = saytext.getText (); if (atext.equals ("")) {joptionpane.showmessageDialog (clientFrame, "Содержание не может быть пустым!"); } else {try {writer.println (никнам + ":" + atext); writer.flush (); } catch (Exception ex) {ex.printstackTrace (); } sayText.settext (""); }}}}; saybutton.addactionListener (saylistener); SAYTEXT.AddactionListener (sayListener); }} сервер
Пакет Project1; Импорт java.awt.*; импортировать java.awt.event.*; импортировать java.io.*; Импорт java.net.*; импортировать java.util.arraylist; импортировать java.util.iterator; импортировать javax.swing.*; Общедоступный сервер класса {private JFrame ServerFrame; частная Jlabel Portlabel; Частный Jlabel говорит Label; Частный Jlabel Picknamelabel; Private Jtextfield PortText; Private JTextfield SayStext; Private Jtextfield Nicknametext; Частный Jbutton Startbutton; Частный JButton говорит, что; Частный jbutton chicnamebutton; Частный JPanel JPanelnorth; Частный JPanel JPanelsouth0; Частный JPanel JPanelsouth1; Частный JPanel JPanelsouth2; Частный JScrollpane Scroller; private jtextarea servertextarea; Private ArrayList <printwriter> clientOutputStreams; Приватный прозвище; public static void main (string [] args) {server aserver = new Server (); aserver.startup (); } // Инициализировать компонент 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 («Прозвище», jlabel.left); nicknametext = new Jtextfield (ник, 30); nicknamebutton = new Jbutton ("Подтверждение"); jpanelsouth0 = new jpanel (); jpanelsouth1 = new jpanel (); jpanelsouth2 = new jpanel (); saylabel = new jlabel ("Сообщение", jlabel.left); SAYTEXT = новый JTextfield (30); saybutton = new Jbutton ("Подтвердить"); } // Создание GUI Private void buildGui () {// Настройки Window ServerFrame.SetTitle ("Server"); serverframe.setDefaultCloseoPeration (jframe.exit_on_close); ServerFrame.setSize (550, 550); // компоненты северной области jpanelnorth.add (portlabel); jpanelnorth.add (porttext); jpanelnorth.add (startbutton); ServerFrame.getContentPane (). Add (borderlayout.north, jpanelnorth); // промежуточный компонент servertextarea.setfocusable (false); scroller.setverticalscrollbarpolicy (scrollpaneconstants.vertical_scrollbar_always); scroller.sethorizontalscrollbarpolicy (scrollpaneconstants.horizontal_scrollbar_never); ServerFrame.getContentPane (). Add (borderlayout.center, scroller); // Компоненты Южного округа jPanelsouth1.add (Протекание); jpanelsouth1.add (Nicknametext); jpanelsouth1.add (никнамбаттон); 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 (Broaderlayout.south, JPanelsy0); ServerFrame.setVisible (true); (aport.equals ("")) {joptionpane.showmessageedialog (ServerFrame, "Пожалуйста, введите правильный номер порта!"); ServertextArea.Append («Ожидание клиентского соединения .../n»); servertextarea.append ("client подключен .../n"); Printwriter writer = new PrintWriter (clientockeock.getOutputStream ()); ClientOutputStreams.add (писатель); Поток t = новый поток (новый клиент -handler (clientocket)); t.start (); }} catch (numberFormateXception | ioException e) {e.printstackTrace (); }}}}; Thread ServerThread = новый поток (ServerRunnable); ServerThread.Start (); } catch (Exception ex) {ex.printstackTrace (); }}}}}; startbutton.addactionListener (StartListener); PortText.AddactionListener (StartListener); // Слушайте никнам и установите Neckname ActionListener Nicknamelistener = new ActionListener () {@Override public void ActionPerformed (actionEvent e) {String atext = nicknametext.getText (); if (! atext.equals ("" ")) {nickname = atext; }}}; chicnamebutton.addactionListener (Plancnamelistener); nicknametext.addactionListener (picknamelistener); nicknametext.addfocuslistener (new FocusListener () {@Override public void Focusgisted (focuseVent e) {} @Override public void фокусировка (FocuseVent e) {string atext = nicknametext.getText (); if (! atext.equals (")) {nickname = atext; // Слушайте кнопку SAIP и отправьте сообщение ActionListener SAYLISTERENER = new ActionListener () {@Override public void actionPerformed (actionEvent e) {string atext = saytext.getText (); if (! atext.equals ("")) {atext = chicname + ":" + atext; sendtoeveryclient (atext); servertextarea.append (atext + "/n"); saytext.settext (""); } else {joptionpane.showmessageDialog (ServerFrame, "Содержание не может быть пустым!"); }}}}; saybutton.addactionListener (saylistener); SAYTEXT.AddactionListener (sayListener); } // много клиентного потока общедоступный класс клиент-индлер реализует Runnable {BufferedReader Hacle; Розетка; public clientHandler (socket clientsocket) {try {asocket = clientocket; InputStreamReader isReader = new InputStreamReader (asocket.getInputStream ()); HATHER = новый BufferedReader (isReader); } catch (Exception ex) {ex.printstackTrace (); }} @Override public void run () {string message; try {while ((message = deamer.readline ())! = null) {sendtoeveryclient (message); servertextarea.append (сообщение + "/n"); }} catch (Exception ex) {ex.printstackTrace (); }}} // Метод отправки сообщений всем клиентам private void sendtoeveryclient (String message) {iterator <printwriter> it = clientOutputStreams.iterator (); while (it.hasnext ()) {try {printwriter writer = (printwriter) it.next (); writer.println (сообщение); writer.flush (); } catch (Exception ex) {ex.printstackTrace (); }}}}Скриншот с графическим интерфейсом:
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.