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);
ImageIcon mlogo = new ImageIcon("images/mlogo.png");
this.setIconImage(mlogo.getImage());
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(null);
jp4.setSize(600,150);
jp4.setVisible(true);
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);
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);
//jf.setBounds(50,300,200,100);
Font b = new Font("Arial",Font.ITALIC,50);
JButton jb1 = new JButton("Login");
jb1.setBounds(50,0,200,100);
jb1.setFont(b);
jb1.setBorder(null);
jb1.setFocusPainted(false);
jb1.setVisible(true);
jb1.addActionListener((ActionEvent e) -> {
u.name = text1.getText().trim();
u.pass = new String(jf.getPassword());
LoginWorker lw = new LoginWorker(u.name, u.pass);
lw.execute();
if(lw.flag == true) {
try {
ChatWindow chat = new ChatWindow();
chat.SetUserName(u.name);
chat.load();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else if(lw.flag == false){
return;
} else if(lw.flag == null) {
return;
} else {
return;
}
});
JButton jb2 = new JButton("Register");
jb2.setBounds(350,0,200,100);
jb2.setFont(b);
jb2.setBorder(null);
jb2.setFocusPainted(false);
jb2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent t) {
RegisterWindow regis = new RegisterWindow();
regis.load();
}
});
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 LoginWorker extends SwingWorker<Boolean,Boolean> {
private String name;
private String pass;
public Boolean flag;
public LoginWorker(String name,String pass) {
this.name = name;
this.pass = pass;
}
@Override
protected Boolean doInBackground() throws Exception {
UserOperation t = new UserOperation();
return t.CheckUser(name, pass);
}
@SuppressWarnings("unused")
@Override
protected void done() {
try {
boolean result = get();
if(result) {
ImageIcon i1 = new ImageIcon("images/correct.png");
JOptionPane.showMessageDialog(null, "Login Success","",JOptionPane.OK_CANCEL_OPTION,i1);
flag = true;
} else {
ImageIcon i2 = new ImageIcon("images/error.png");
JOptionPane.showMessageDialog(null, "Login Failed!The login or password is invaild!","",JOptionPane.OK_CANCEL_OPTION,i2);
flag = false;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class User {
String name;
String pass;
}
请问这段代码哪里出错了,为什么最好会报一个空指针错误呢