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

📄 registerdialog.java

📁 JAVA
💻 JAVA
字号:
package chatSystem;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.awt.Toolkit;
import java.io.*;
/**
 * 这个类是用来处理用户注册的线程,有两个构造函数,主要是为了利用这个线程多实现一些功能而不增加新的线程
 * @author 黄祖光
 */
public class RegisterDialog extends JDialog implements ActionListener,Runnable
{
	
		   JButton ok,cancel;
		   JTextField field,nameField;
		   JPanel panel;
		   JPasswordField pw,checkpw;
		   String pwstr,cpwstr;
		   boolean readed=false;
		   String str;
		   DatagramSocket socket=null;
		   Clients clients=null;
		   
		   public RegisterDialog(JFrame frame,String str,boolean bo)
		   {
			   super(frame,str,bo);
			   JLabel port=new JLabel("职业:");
			   field=new JTextField(6);
			   JLabel name=new JLabel("姓名:");
			   nameField=new JTextField(6);
			   pw=new JPasswordField("",6);
			   checkpw=new JPasswordField("",6);
			   JLabel pwl=new JLabel("密码 :");
			   JLabel cpwl=new JLabel("确认 :");
			   panel=new JPanel();
			   panel.add(port);
			   panel.add(field);
			   panel.add(name);
			   panel.add(nameField);
			   panel.add(pwl);
			   panel.add(pw);
			   panel.add(cpwl);
			   panel.add(checkpw);
			   ok=new JButton("确定");
			   ok.addActionListener(this);
			   cancel=new JButton("取消");
			   cancel.addActionListener(this);
			   JPanel bp=new JPanel();
			   bp.add(ok);
			   bp.add(cancel);
			   add(panel,BorderLayout.CENTER);
			   add(bp,BorderLayout.SOUTH);
			   Toolkit tool=Toolkit.getDefaultToolkit();
			   Dimension dim=tool.getScreenSize();
			   setBounds((dim.width-250)/2,(dim.height-150)/2,250,150);
		       setResizable(false);
		   }
		   
		   public RegisterDialog(LoginDialog frame,String str,boolean bo)
		   {
			   super(frame,str,bo);
			   this.clients=clients;
			   JLabel port=new JLabel("职业:");
			   field=new JTextField(6);
			   JLabel name=new JLabel("姓名:");
			   nameField=new JTextField(6);
			   pw=new JPasswordField("",6);
			   checkpw=new JPasswordField("",6);
			   JLabel pwl=new JLabel("密码 :");
			   JLabel cpwl=new JLabel("确认 :");
			   panel=new JPanel();
			   panel.add(port);
			   panel.add(field);
			   panel.add(name);
			   panel.add(nameField);
			   panel.add(pwl);
			   panel.add(pw);
			   panel.add(cpwl);
			   panel.add(checkpw);
			   panel.add(new JLabel("注意:只能输入字母和数字!!"));
			   ok=new JButton("确定");
			   ok.addActionListener(this);
			   cancel=new JButton("取消");
			   cancel.addActionListener(this);
			   JPanel bp=new JPanel();
			   bp.add(ok);
			   bp.add(cancel);
			   add(panel,BorderLayout.CENTER);
			   add(bp,BorderLayout.SOUTH);
			   Toolkit tool=Toolkit.getDefaultToolkit();
			   Dimension dim=tool.getScreenSize();
			   setBounds((dim.width-250)/2,(dim.height-150)/2,250,150);
		       setResizable(false);
		   }
		   
		   public void actionPerformed(ActionEvent ae)
		   {
			   if(ae.getSource()==ok)
			   {
				   pwstr=pw.getText();
				   cpwstr=checkpw.getText();
				   if(!pwstr.equals(cpwstr))//确定用户两回输入的密码相同,如果不相同提醒重新输入
				   {
					   new WarmDialog(this,"请重新输入密码",true);
				   }
				   else 
				   {
					   str=getMessage()+","+getPassword();//相同的话就取用户信息
					   Thread t=new Thread(this);
					   t.start();
				   }
					   	      
			   }
			   else if(ae.getSource()==cancel)
			   {
				   setVisible(false);
				   try 
				   {
					    readed=true;
					    if(socket!=null)socket.close();
				   }
				   catch (Exception e) 
				   {
					    e.printStackTrace();
			       }
			   }
		   }
		   /**
		    * 用来取得用户职业和姓名
		    */
		   public String getMessage()
		   {
			   String str=field.getText().trim()+","+nameField.getText().trim();
			   return str;
		   }
		   /**
		    * 取得密码
		    */
		   public String getPassword()
		   {
			   return pwstr;
		   }
		   
		   public void run()
		   {
			   try
			   {
				  InetAddress address=InetAddress.getByName("192.168.1.100");//服务器的IP
				  socket=new DatagramSocket();
					  while(!str.equals(""))
					  {
						  try
						  {
						     byte[] by=("REGISTER#"+str).getBytes();
						     DatagramPacket packet=new DatagramPacket(by,by.length,address,5566);
						     socket.send(packet);
						     str="";//用来控制发送的次数,当用户点一回确定按钮时,就发一次信息给服务程序,因为UDP不能保证一次就能发送成功,点一回按钮就给str赋一次值
                                    //然后就执行一回发送,执行一回就清空一回str
						  }
						  catch(IOException ioe)
						  {
							  ioe.printStackTrace();
						  }
					  }
					  
					 while(!readed)
					 {
						 byte[] rec=new byte[800];
						 DatagramPacket packet=new DatagramPacket(rec,rec.length,address,5566);
						 try 
						 {
							socket.receive(packet);//接收服务程序发来的确认信息
							String stri=new String(packet.getData(),0,packet.getLength());
							if(stri.equals("OK"))
							{	
							  readed=true;
							  socket.close();
							  setVisible(false);
							  new WarmDialog(this,"注册成功",true);
							}
							else if(stri.equals("WRONG"))
							{
								new WarmDialog(this,"注册失败",true);
							}
						 }
						 catch (IOException e)
						 {
							e.printStackTrace();
						 }
					 }
			   }
			   catch(SocketException se)
			   {
				   se.printStackTrace();
			   }
			   catch(UnknownHostException ue)
			   {
				   ue.printStackTrace();
			   }
			  
		   }
}

⌨️ 快捷键说明

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