client.java
package ChatExtends;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class LoginWindow extends JFrame {
User u = new User();
public void Load() throws Exception{
this.setName("Login");
this.setLayout(null);
this.setSize(600,600);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container ct = this.getContentPane();
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();
JPanel jp4 = new JPanel();
jp1.setSize(600, 150);
jp2.setBounds(0,150,500,300);
GridLayout gy = new GridLayout(4,1,5,5);
this.setLayout(gy);
jp4.setLayout(new GridLayout(1,2,5,5));
jp4.setSize(600,150);
Font f = new Font("Blackletter",Font.ITALIC,100);
JLabel name = new JLabel("ChatW");
name.setFont(f);
name.setBounds(100,300,600,300);
name.setForeground(Color.blue);
name.setVisible(true);
jp1.add(name);
JLabel l = new JLabel();
ImageIcon ic1 = new ImageIcon("images/login.png");
l.setIcon(ic1);
//l.setBounds(0, 100, ic1.getIconWidth(), ic1.getIconHeight());
l.setVisible(true);
l.setHorizontalAlignment(SwingConstants.CENTER);
l.setVerticalAlignment(SwingConstants.CENTER);
JTextField text1 = new JTextField(15);
u.name = text1.getText();
text1.setBorder(null);
text1.setVisible(true);
JLabel l1 = new JLabel();
ImageIcon ic2 = new ImageIcon("images/lock.png");
l1.setIcon(ic2);
//l1.setBounds(0,300,ic2.getIconWidth(),ic2.getIconHeight());
l1.setVisible(true);
l1.setHorizontalAlignment(SwingConstants.CENTER);
l1.setVerticalAlignment(SwingConstants.CENTER);
JPasswordField jf = new JPasswordField(15);
u.pass = Encryted.FinalEncrypted(new String(jf.getPassword()));
jf.setBorder(null);
//jf.setBounds(50,300,200,100);
Font b = new Font("Arial",Font.ITALIC,50);
JButton jb1 = new JButton("Login");
jb1.setFont(b);
jb1.setBorder(null);
jb1.setFocusPainted(false);
jb1.setVisible(true);
jb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
UserOperation t = new UserOperation();
try {
if(t.CheckUser(u.name, u.pass)) {
ImageIcon i1 = new ImageIcon("../images/correct.png");
JOptionPane.showMessageDialog(null, "Login Success!","",JOptionPane.INFORMATION_MESSAGE,i1);
} else {
ImageIcon i2 = new ImageIcon("../images/error.png");
JOptionPane.showMessageDialog(null,"Login Failed!The login or password is incorrect!","",JOptionPane.INFORMATION_MESSAGE,i2);
}
} catch (Exception r) {
r.printStackTrace();
}
}
});
JButton jb2 = new JButton("Register");
jb2.setFont(b);
jb2.setBorder(null);
jb2.setFocusPainted(false);
jb2.setVisible(true);
jp4.add(jb1);
jp4.add(jb2);
jp2.add(l);
jp2.add(text1);
jp3.add(l1);
jp3.add(jf);
jp2.setVisible(true);
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.setVisible(true);
ct.add(jp1,"North");
ct.add(jp2,"Center");
ct.add(jp3,"Center");
ct.add(jp4,"South");
}
}
class User {
String id;
String name;
String pass;
}
UserOperation.java
package ChatExtends;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
import java.util.Random;
public class UserOperation {
InputStream inputs = this.getClass().getResourceAsStream("../conf/server.properties");
Properties p = new Properties();
public boolean CheckUser(String name,String pass) throws Exception{
boolean flag = false;
Class.forName("com.mysql.cj.jdbc.Driver");
p.load(inputs);
String DBHost = p.getProperty("sqlhost");
String DBName = p.getProperty("sqldata");
String DBUser = p.getProperty("sqluser");
String DBPass = p.getProperty("sqlpass");
String sqlurl = "jdbc:mysql://" + DBHost + "/" + DBName;
Connection connect = DriverManager.getConnection(sqlurl,DBUser,DBPass);
String SQLSelectName = "select ? from UserInformation";
String SQLSelectPass = "select Pass from UserInformation where Name = ?";
String SQLCheckAvailable = "select Available from UserInformation where name = ?";
PreparedStatement pre1 = connect.prepareStatement(SQLSelectName);
pre1.setString(1,name);
PreparedStatement pre2 = connect.prepareStatement(SQLSelectPass);
pre2.setString(1,name);
PreparedStatement pre3 = connect.prepareStatement(SQLCheckAvailable);
pre3.setString(1,name);
ResultSet rs1 = pre1.executeQuery();
ResultSet rs2 = pre2.executeQuery();
ResultSet rs3 = pre3.executeQuery();
if(rs1.next() && rs2.next()) {
if(rs2.getString("Pass") == Encryted.FinalEncrypted(pass) && rs3.getString("Available") == "YES") {
flag = true;
} else {
flag = false;
}
} else {
flag = false;
}
return flag;
}
public boolean addUser(String name,String password) throws Exception{
boolean r = false;
String Id = RandomString();
String epass = Encryted.FinalEncrypted(password);
p.load(inputs);
String DBHost = p.getProperty("sqlhost");
String DBName = p.getProperty("sqldata");
String DBUser = p.getProperty("sqluser");
String DBPass = p.getProperty("sqlpass");
String sqlurl = "jdbc:mysql://" + DBHost + "/" + DBName;
Connection con2 = DriverManager.getConnection(sqlurl,DBUser,DBPass);
String regist = "insert into UserInformation values(?,?,?,?)";
PreparedStatement pre = con2.prepareCall(regist);
pre.setString(1,Id);
pre.setString(2,name);
pre.setString(3,epass);
pre.setString(4,"Yes");
if(pre.executeUpdate() > 0) {
r = true;
} else {
r = false;
}
return r;
}
public String RandomString() {
String LetterInUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String LetterInLowerCase = "abcdefghijklmnopqrstuvwxyz";
String Numbers = "0123456789";
String All = LetterInUpperCase + LetterInLowerCase + Numbers;
StringBuffer RandString = new StringBuffer();
for(int g = 0;g < 10;g++) {
Random rand = new Random();
int RandIndex = rand.nextInt(g);
RandString.append(All.charAt(RandIndex));
}
return RandString.toString();
}
}
上面的代码可以怎么优化,让按钮点击不卡死呢