⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatapplet.java

📁 用java编写的一个聊天工具(有源代码)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	       System.out.println("request into secret");
	     }
	     else
	     { list1.deselect(index);
	       list1.select(selecti);
	     }
	   }	 
    }
    //Font information  
    float fsize=Float.parseFloat(fontsize.getText());
    //checkbox
    if(e.getSource()==ch1)
    { if(e.getStateChange()==e.SELECTED)
      { ch1.setState(true);
        if(ch3.getState())
         ch3.setState(false);
        if(ch2.getState())
         ch2.setState(false);
        msg_txt.setFont(msg_txt.getFont().deriveFont(Font.BOLD,fsize));
      }
      else
      { ch1.setState(false);
        msg_txt.setFont(msg_txt.getFont().deriveFont(Font.PLAIN,fsize));
      }
    }
    if(e.getSource()==ch2)
    { if(e.getStateChange()==e.SELECTED)
      { ch2.setState(true);
        if(ch3.getState())
          ch3.setState(false);
        if(ch1.getState())
          ch1.setState(false);
        msg_txt.setFont(msg_txt.getFont().deriveFont(Font.ITALIC,fsize));
      }
      else
      { ch2.setState(false);      
        msg_txt.setFont(msg_txt.getFont().deriveFont(Font.PLAIN,fsize));
      }
    }
    if(e.getSource()==ch3)
    { if(e.getStateChange()==e.SELECTED)
      { ch3.setState(true);
        ch1.setState(false);
        ch2.setState(false);
        msg_txt.setFont(msg_txt.getFont().deriveFont(Font.PLAIN,fsize));
      }
      else
        ch3.setState(false);
    }
    //checkboxgroup
    if(e.getSource()==cr1&&e.getStateChange()==e.SELECTED)
    { msg_txt.setForeground(Color.red);
      color="RED";
    }
    if(e.getSource()==cr2&&e.getStateChange()==e.SELECTED)
    { msg_txt.setForeground(Color.blue);
      color="BLUE";
    }
    if(e.getSource()==cr3&&e.getStateChange()==e.SELECTED)
    { msg_txt.setForeground(Color.green);
      color="GREEN";
    }
    if(e.getSource()==cr4&&e.getStateChange()==e.SELECTED)
    { msg_txt.setForeground(Color.black);
      color="BLACK";
    }
  }
  
  //other member function
  public void disconnect()                                         //客户端点击断开连接要运行的方法
  { if(soc!=null)
	  {  try
		 {  chat_txt.setText("");
			name_txt.setText("");
			current.setText("");
			list1.clear();
		    listen.suspend();
			ps.println("QUIT");                                    //用打印流发送QUIT信息通知服务器断开此次通信
			ps.flush();
			soc.close(); 
			soc=null;                              //关闭套接字
		 }
		 catch(IOException e)
		 {  System.out.println("Error:"+e);
		 }
		 finally     //default settings
		 { cr1.setState(false);
		   cr2.setState(false);
		   cr3.setState(false);
		   cr4.setState(true);
		   //---------------
		   ch1.setState(false);
		   ch2.setState(false);
		   ch3.setState(true);
		   //---------------
		   fontsize.setText("12"); 
		 }
	  }// end of if
  }

  class Listen extends Thread       //客户端线程类用来监听服务器传来的信息
  { String name=null;                   //用来存储客户端连接后的name信息
    DataInputStream dis=null;          //用来实现客户端接受服务器数据的输入流
    PrintStream ps=null;               //用来实现从客户端发送数据到服务器的打印流
    Socket socket=null;                //用来存储客户端的socket信息
    chatApplet parent=null;             //用来存储当前运行的chatApplet实例
    public Listen(chatApplet p,String n,Socket s)   //Listen类的构造器
	{ //接受参数
	   parent=p;
	   name=n;
	   socket=s;
       try
	   { //实例化两个数据流
	     dis=new DataInputStream(s.getInputStream());
		 ps=new PrintStream(s.getOutputStream());
       }
	   catch(IOException e)
	   { System.out.println("Error:"+e);
		 parent.disconnect();
	   }
    }   //end of Listen constractor
    public void run()                               //线程运行方法
	{ String msg=null;
	  while(true)
	  {  try
	     { byte b[]=new byte[512];
		   int count=dis.read(b);
		   StringBuffer sbuf=new StringBuffer();
		   for(int i=0;i<count;i++)
		     sbuf.append((char)b[i]);
	  	   msg=sbuf.toString();  
	  	 }                 //读取从服务器传来的信息
		 catch(IOException e)
		 { System.out.println("Error:"+e);
		   parent.disconnect();
		 }
		 if(msg==null)                           //如果从服务器传来的信息为空则断开此次连接
		 { parent.listen=null;              
		   parent.soc=null;
		   parent.list1.clear();
		   return;
		 }
		 StringTokenizer st=new StringTokenizer(msg,":");   //用StringTokenizer类来实现读取分段字符
		 String keyword=st.nextToken();                     //读取信息头即关键字用来识别是何种信息
         if(keyword.equals("PEOPLE"))                      //如果是PEOPLE则是服务器发来的客户连接信息
		                     //主要用来刷新客户端的用户列表
		 { parent.list1.clear();
		   while(st.hasMoreTokens())                     //遍历st取得目前所连接的客户
	       { String str=st.nextToken();
			 parent.list1.addItem(str);
		   }
		 }
		 else if(keyword.equals("MSG"))                   //如果关键字是MSG则是服务器传来的聊天信息
		 //主要用来刷新客户端聊天信息区将每个客户的聊天内容显示出来
		 { int fontstyle=Integer.parseInt(st.nextToken());
		   int fontsize=Integer.parseInt(st.nextToken());
		   String fontcolor=st.nextToken();
		   String usr=st.nextToken();
		   String temp=usr+st.nextToken("\0");
		   parent.chat_txt.append(temp);
		   parent.chat_txt.append("\n\n");
		   parent.current.setFont(chat_txt.getFont().deriveFont(fontstyle,(float)fontsize));
		   parent.current.setText(temp);
		   if(fontcolor.equalsIgnoreCase("RED"))
		     parent.current.setForeground(Color.red);
		   if(fontcolor.equalsIgnoreCase("BLUE"))
		     parent.current.setForeground(Color.blue);
		   if(fontcolor.equalsIgnoreCase("GREEN"))
		     parent.current.setForeground(Color.green);
		   if(fontcolor.equalsIgnoreCase("BLACK"))
		       parent.current.setForeground(Color.black);
		 }
		 else if(keyword.equals("SYSMSG"))                //系统消息
		 { String info=st.nextToken("\0");
  	       String title="System Message";
           JOptionPane.showMessageDialog(parent,info,title,JOptionPane.PLAIN_MESSAGE);  
		 }
		 else if(keyword.equals("CONNECT"))           //有用户上线
		 { String usr=st.nextToken();
		   parent.list1.addItem(usr+" 上线");	        
		 }
		 else if(keyword.equals("QUIT"))                //有用户下线
		 { String usr=st.nextToken();
		   parent.list1.addItem(usr+" 退出");
		 }	
		 else if(keyword.equals("REQCON"))
		 { boolean agree;
		   String usr=st.nextToken();
		   int rv;
		   if(select==null)
		   { 
		     System.out.println("respond request");
		 	 String info=usr+"要与你进入悄悄话模式,同意否?";
  	         String title="make sure";
             rv=JOptionPane.showConfirmDialog(parent,info,title,JOptionPane.OK_CANCEL_OPTION);  
             if(rv==JOptionPane.OK_OPTION)   
              { 
                agree=true;
                int i;
                for(i=0;i<parent.list1.getItemCount();i++)
                 {
                  	if(parent.list1.getItem(i).equals(usr))
                  	{	parent.list1.select(i);
                  		select=usr;
                  		selecti=i;
                  		break;
                  	}
                  }
              }
		      else 
		          agree=false;
		     StringBuffer msg1=new StringBuffer("RESPOND:");  
             msg1.append(usr+" "+agree);
             ps.println(msg1);
	         ps.flush();
	       }
	       else
	       {
	         String info=usr+"要与你进入悄悄话模式\n";
	         info=info+" 若同意,则会先退出与 "+parent.list1.getSelectedItem()+"的悄悄话模式";
  	         info=info+"\n 若撤消则拒绝"+usr+"的请求 ";
  	         String title="make sure";
             rv=JOptionPane.showConfirmDialog(parent,info,title,JOptionPane.OK_CANCEL_OPTION);  
	       	 if(rv==JOptionPane.OK_OPTION)
		     { 
		         agree=true;
		         StringBuffer msg1=new StringBuffer("RESPOND:");  
                 msg1.append(usr+" "+agree);
                 ps.println(msg1);
	             ps.flush();
	             StringBuffer msg2=new StringBuffer("REQEXIT:");  
                 msg2.append(parent.list1.getSelectedItem());
                 ps.println(msg2);
	             ps.flush();
	             parent.list1.deselect( parent.selecti); //change list state;
		          
                 for(int i=0;i<parent.list1.getItemCount();i++)
                 {
                  	if(parent.list1.getItem(i).equals(usr))
                  	{	parent.list1.select(i);
                  		select=usr;
                  		selecti=i;
                  		break;
                  	}
                  }
	           }
	           else
	           {  agree=false;
	              StringBuffer msg1=new StringBuffer("RESPOND:");  
                  msg1.append(usr+" "+agree);
                  ps.println(msg1);
	              ps.flush();             
	           	}
	       	}
		 }
		 else if(keyword.equals("REQEXIT"))
		 { String usr=st.nextToken();	
		   String info=usr+"要与你退出 悄悄话模式";
  	       String title="make sure";
           JOptionPane.showMessageDialog(parent,info,title,JOptionPane.PLAIN_MESSAGE);  
           parent.list1.deselect( parent.selecti); //change list state;
		   select=null;
		   selecti=-1;
		 }
		 else if(keyword.equals("RESPOND"))
		 { StringTokenizer resp=new StringTokenizer(st.nextToken());
		   String usr=resp.nextToken();
		   boolean agree=Boolean.parseBoolean(resp.nextToken());
		   if(agree)
		   { String info=usr+"同意与你进入 悄悄话模式";
  	         String title="make sure";
             JOptionPane.showMessageDialog(parent,info,title,JOptionPane.PLAIN_MESSAGE); 
           }
		   else
		   { String info=usr+"拒绝与你进入 悄悄话模式";
  	         String title="make sure";
             JOptionPane.showMessageDialog(parent,info,title,JOptionPane.PLAIN_MESSAGE); 
             parent.list1.deselect( parent.selecti);
             select=null;
             selecti=-1;
		   }
		 }
		 else if(keyword.equals("SERQUIT"))                //如果关键字是QUIT则是服务器关闭的信息
		                        //用来切断此次连接
		 { System.out.println("Quit");
		   try
		   { parent.listen.stop();
		     parent.listen=null;
		     parent.soc.close();
			 parent.soc=null;
           }
           catch(IOException e)
           { System.out.println("Error:"+e);
           }
		   parent.list1.clear();
		   return;
		 }
      }  //end of while
    }     //end of run method
  }      //end of Listen inner class
}     //end of chatApplet class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -