<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ![](https://box.kancloud.cn/83e6052e83e9c75f62f563cc796f5992_720x292.png) Server.java改善 ~~~ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.ServerSocket; import java.util.Vector; public class Server extends JFrame implements ActionListener { JLabel jlPort=new JLabel("端 口 號");//創建提示輸入端口號標簽 JTextField jtfPort=new JTextField("9999");//用于輸入端口號的文本框//z并給以默認值9999 JButton jbStart=new JButton("啟動");//創建"啟動"按鈕 JButton jbStop=new JButton("關閉");//創建"關閉"按鈕 JPanel jps=new JPanel();//創建一個JPanel對象//z把上面控件放入其中 JList jlUserOnline=new JList();//創建用于顯示當前用戶的JList//z左邊 JScrollPane jspx=new JScrollPane(jlUserOnline);//將顯示當前用戶的JList放在JScrollPane中 JSplitPane jspz=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspx,jps);//創建JSplitPane對象 ServerSocket ss;//聲明ServerSocket引用 ServerThread st;//聲明ServerThread引用//z下面肯定有new這個類,把這個線程用起來 Vector onlineList=new Vector();//創建存放當前在線用戶的Vector對象 public Server() { this.initialComponent();//初始化控件 this.addListener();//為相應的控件注冊事件監聽器 this.initialFrame();//初始化窗體 } public void initialComponent() { jps.setLayout(null);//設為空布局 jlPort.setBounds(20,20,50,20); jps.add(jlPort);//添加用于提示輸入端口號的標簽 this.jtfPort.setBounds(85,20,60,20); jps.add(this.jtfPort);//添加用于輸入端口號的文本框 this.jbStart.setBounds(18,50,60,20); jps.add(this.jbStart);//添加"開始"按鈕 this.jbStop.setBounds(85,50,60,20); jps.add(this.jbStop);//添加"關閉"按鈕 this.jbStop.setEnabled(false);//將"關閉"按鈕設為不可用 } public void addListener() { this.jbStart.addActionListener(this);//為"開始"按鈕注冊事件監聽器 this.jbStop.addActionListener(this);//為"關閉"按鈕注冊事件監聽器 } public void initialFrame() { this.setTitle("象棋--服務器端");//設置窗體標題 Image image=new ImageIcon("ico.gif").getImage(); this.setIconImage(image); this.add(jspz);//將JSplitPane添加到窗體中 jspz.setDividerLocation(250); jspz.setDividerSize(4);//設置分割線的位置和寬度 this.setBounds(20,20,420,320); //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);//設置可見性 this.addWindowListener(//為窗體關閉事件注冊監聽器//z右上角×的功能 new WindowAdapter() { public void windowClosing(WindowEvent e) { if(st==null)//當服務器線程為空時直接退出 { System.exit(0);//退出 return;//相當于break } try { Vector v=onlineList; int size=v.size(); for(int i=0;i<size;i++) { //當不為空時,向在線用戶發送離線信息 ServerAgentThread tempSat=(ServerAgentThread)v.get(i); tempSat.dout.writeUTF("<#SERVER_DOWN#>"); tempSat.flag=false;//終止服務器代理線程 } st.flag=false;//終止服務器線程 st=null; ss.close();//關閉ServerSocket v.clear();//將在線用戶列表清空 refreshList();//刷新列表 } catch(Exception ee) { ee.printStackTrace(); } System.exit(0);//退出 } } ); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==this.jbStart) {//當單擊"啟動"按鈕時 /* System.out.println("服務器啟動成功"); this.jbStop.setEnabled(true); this.jbStart.setEnabled(false);*/ this.jbStart_event(); } else if(e.getSource()==this.jbStop) {//單擊"關閉"按鈕后 /* System.out.println("服務器正常關閉"); this.jbStop.setEnabled(false); this.jbStart.setEnabled(true);*/ this.jbStop_event(); } } public void jbStart_event() { //單擊"啟動"按鈕的業務處理代碼 int port=0;//定義端口號 try { //獲得用戶輸入的端口號,并轉化為整型 port=Integer.parseInt(this.jtfPort.getText().trim());//z.trim()就是去除空格 } catch(Exception ee) {//端口號不是整數,給出提示信息//z彈出對話框 JOptionPane.showMessageDialog(this,"端口號只能是整數","錯誤", JOptionPane.ERROR_MESSAGE); return; } if(port>65535||port<0) {//斷口號不合法,給出提示信息 JOptionPane.showMessageDialog(this,"端口號只能是0-65535的整數","錯誤", JOptionPane.ERROR_MESSAGE); return; } try { this.jbStart.setEnabled(false);//將開始按鈕設為不可用 this.jtfPort.setEnabled(false);//將用于輸入端口號的文本框設為不可用 this.jbStop.setEnabled(true);//將停止按鈕設為可用 ss=new ServerSocket(port);//創建ServerSocket對象 st=new ServerThread(this);//創建服務器線程 st.start();//啟動服務器線程 //給出服務器啟動成功的提示信息 JOptionPane.showMessageDialog(this,"服務器啟動成功","提示", JOptionPane.INFORMATION_MESSAGE); } catch(Exception ee) { //給出服務器啟動失敗的提示信息 JOptionPane.showMessageDialog(this,"服務器啟動失敗","錯誤", JOptionPane.ERROR_MESSAGE); this.jbStart.setEnabled(true);//將開始按鈕設為可用 this.jtfPort.setEnabled(true);//將用于輸入端口號的文本框設為可用 this.jbStop.setEnabled(false);//將停止按鈕設為不可用 } } public void jbStop_event() { //單擊"關閉"按鈕的業務處理代碼 try { Vector v=onlineList; int size=v.size(); for(int i=0;i<size;i++) {//向在線用戶發送離線信息 ServerAgentThread tempSat=(ServerAgentThread)v.get(i); tempSat.dout.writeUTF("<#SERVER_DOWN#>"); tempSat.flag=false;//關閉服務器代理線程 } st.flag=false;//關閉服務器線程 st=null; ss.close();//關閉ServerSocket v.clear();//將在線用戶列表清空 refreshList();//刷新列表 this.jbStart.setEnabled(true);//將開始按鈕設為可用 this.jtfPort.setEnabled(true);//將用于輸入端口號的文本框設為可用 this.jbStop.setEnabled(false);//將停止按鈕設為不可用 } catch(Exception ee) { ee.printStackTrace(); } } public void refreshList() { //更新在線用戶列表的業務處理代碼 Vector v=new Vector(); int size=this.onlineList.size(); for(int i=0;i<size;i++) {//遍歷在線列表 ServerAgentThread tempSat=(ServerAgentThread)this.onlineList.get(i); String temps=tempSat.sc.getInetAddress().toString(); temps=temps+"|"+tempSat.getName();//獲得所需信息 v.add(temps);//添加到Vector中 } this.jlUserOnline.setListData(v);//更新列表數據 } public static void main(String args[]) { new Server(); } } ~~~ 主要位置 ![](https://box.kancloud.cn/af97ea4c9cfde501894d708e927a2f56_505x53.png) ![](https://box.kancloud.cn/8436ae603d74284ce6aef167ba3d6ca7_495x449.png) ![](https://box.kancloud.cn/e3eeeebfcce9fe1255b752e0ba7766cc_367x368.png) 結果 ![](https://box.kancloud.cn/22a3d9b83ab32dd533c456f4264a22cb_441x346.png) ![](https://box.kancloud.cn/08013012ae5c736e556ef31f853fd26f_427x321.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看