この記事の例は、参照のためにJavaチャットルームコードを共有しています。特定のコンテンツは次のとおりです
主に知識に関与しています
eventイベントリスニングメカニズムを含むJavaでのGUIプログラムの執筆。
Javaネットワーク通信プログラミング、サーバーソケット、ソケットクラスの使用。
Javaでのマルチスレッドプログラミング、スレッドクラス、および実行可能なインターフェイスの使用。
ソースコード
クライアント
パッケージProject1; java.awt。*; java.awt.event。*; java.io.*をインポートします。 java.net。*; javax.swing。*;パブリッククラスクライアント{private jframe clientframe;プライベートJlabel iplabel;プライベートJlabel Portlabel;プライベートJlabel SaysLabel;プライベートJlabel Nicknamelabel;プライベートJTextField iPtext;プライベートjtextfieldポートテキスト。プライベートjtextfield nicknametext;プライベートjtextfield saystext;プライベートJButton ConnectButton;プライベートJbutton nicknamebutton;プライベートJbuttonはButtonを言います。プライベートJPanel JPanelnorth; Private JPanel JPanelsouth0; Private JPanel JPanelsouth1; Private JPanel JPanelsouth2; Private JTextarea ClientTextarea;プライベートjscrollpaneスクラー。プライベートバッファレッドリーダー。プライベートプリントライターライター。プライベートストリングニックネーム; 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( "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(); screoller = 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( "Confism"); saylabel = new Jlabel( "Message"、jlabel.left); SayText = new JTextField(30); saybutton = new jbutton( "Confism"); } // build gui private void buildgui(){//ウィンドウの設定clientframe.settitle( "client"); clientFrame.setDefaultCloseOperation(jframe.exit_on_close); clientframe.setsize(550、550); // component jpanelnorth.add(iplabel); jpanelnorth.add(iptext); jpanelnorth.add(portlabel); jpanelnorth.add(porttext); jpanelnorth.add(connectbutton); clientFrame.getContentPane()。add(borderlayout.north、jpanelnorth); //中間コンポーネントclientTextarea.setFocusable(false); screoller.setverticalscrollbarpolicy(scrollpaneconstants.vertical_scrollbar_always); screoller.sethorizontalscrollbarpolicy(scrollpaneconstants.horizontal_scrollbar_never); clientFrame.getContentPane()。add(borderlayout.center、screoller); //南地域のコンポーネントjpanelsouth1.add(nicknamelabel); jpanelsouth1.add(nicknametext); jpanelsouth1.add(nicknamebutton); jpanelsouth2.add(saylabel); jpanelsouth2.add(sakext); jpanelsouth2.add(saybutton); jpanelsouth0.setlayout(new boxlayout(jpanelsouth0、boxlayout.y_axis)); jpanelsouth0.add(jpanelsouth1); jpanelsouth0.add(jpanelsouth2); clientframe.getContentPane()。add(borderlayout.south、jpanelsouth0); //クライアントフレームを表示するようにウィンドウを設定します。SetVisible(true); } //クライアントはpublic void startup(){buildgui();を実行します。 //サーバーメッセージを受信するスレッドrunnable incomingReader = new runnable(){@Override public void run(){string message; try {while((message = reader.readline())!= null){clientTextarea.append(message + "/n"); }} catch(Exception ex){ex.printstacktrace(); }}}}; //接続ボタンを聞くために、サーバーConnectButton.AddActionListener(new ActionListener(){@Override public void actionPerformed(actionEvent e){string aserverip = iptext.getText(); string aserverport = porttext.getText(); if(aserverip(aserverip); ""); joptionpane.showmessageialog(クライアントフレーム、「完全なIPとポートを入力してください!」) BufferedReader(clientsocketputStream());ポート入力は正しい。 ");}}}}}); //ニックネームを聞いて、Nickname ActionListener nicknameListener = new ActionListener(){@Override public void ActionPerformed(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;}; //サーバーにメッセージを送信するactionlistener saylistener = new ActionListener(){@Override public void actionPerformed(actionEvent e){string atext = saytext.getText(); if(atext.equals( "")){joptionpane.showmessageialog(clientFrame、 "コンテンツは空にすることはできません!"); } else {try {writer.println(nickname + ":" + 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 SaysLabel;プライベートJlabel Nicknamelabel;プライベートjtextfieldポートテキスト。プライベートjtextfield saystext;プライベートjtextfield nicknametext;プライベートJButton StartButton;プライベートJbuttonはButtonを言います。プライベートJbutton nicknamebutton;プライベートJPanel JPanelnorth; Private JPanel JPanelsouth0; Private JPanel JPanelsouth1; Private JPanel JPanelsouth2;プライベートjscrollpaneスクラー。 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(); screoller = new JScrollpane(servertextarea); nicknamelabel = new Jlabel( "nickname"、jlabel.left); nicknametext = new JTextfield(nickname、30); nicknamebutton = new jbutton( "Confism"); jPanelsouth0 = new JPanel(); jPanelsouth1 = new JPanel(); jpanelsouth2 = new JPanel(); saylabel = new Jlabel( "Message"、jlabel.left); SayText = new JTextField(30); saybutton = new jbutton( "Confism"); } // build 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); screoller.setverticalscrollbarpolicy(scrollpaneconstants.vertical_scrollbar_always); screoller.sethorizontalscrollbarpolicy(scrollpaneconstants.horizontal_scrollbar_never); serverframe.getContentPane()。add(borderlayout.center、screoller); //南地区jpanelsouth1.add(nicknamelabel)のコンポーネント; jpanelsouth1.add(nicknametext); jpanelsouth1.add(nicknamebutton); jpanelsouth2.add(saylabel); jpanelsouth2.add(sakext); jpanelsouth2.add(saybutton); jpanelsouth0.setlayout(new boxlayout(jpanelsouth0、boxlayout.y_axis); jpanelsouth0.add(jpanelsouth1); jpanelsouth0.add(jpanelsouth2); serverframe.getcontentpane()(borderlayout. jpanelsout. serverframe.setvisible(true); porttext.getText(); serversocket(integer.parseint(aport)); servertextarea.append( "client connected .../n"); printwriter writer = new PrintWriter(clientsocket.getOutputStream()); clientOutputStreams.add(writer);スレッドT = newスレッド(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); //ニックネームを聞いて、Nickname ActionListener nicknameListener = new ActionListener(){@Override public void ActionPerformed(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;}; // sayボタンを聞いて、メッセージを送信するactionlistener saylistener = new ActionListener(){@Override public void ActionPerformed(ActionEvent e){string atext = sayText.getText(); if(!atext.equals( "")){atext = nickname + ":" + atext; sendtoeveryclient(atext); servertextarea.append(atext + "/n"); saytext.settext( ""); } else {joptionpane.showmessageialog(serverFrame、 "コンテンツは空にすることはできません!"); }}}}; saybutton.addactionlistener(saylistener); SayText.AddActionListener(SayListener); } //マルチクライアントスレッドパブリッククラスクライアントハンドラーを実装してrunnable {bufferedReader Breader;ソケット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(); }}} //すべてのクライアントにメッセージを送信するメソッドプライベートボイド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(); }}}}GUIランニングスクリーンショット:
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。