我這里是一個簡單的用戶登錄的程序,有兩個Jpanel(pnlTop和主體部分),主體部分有user的JPanel,PassWord的JPanel。 其中,用戶的密碼、用戶名信息都是存儲在"information"路徑下的"Customer.txt"文件里面的。 isCorrect()和checkInput()屬于自定義的方法,用于檢查輸入和文件內的信息是否匹配。package?UI;
import?java.awt.BorderLayout;
import?java.awt.Color;
import?java.awt.Dimension;
import?java.awt.Font;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?java.util.ArrayList;
import?java.util.List;
import?javax.swing.JButton;
import?javax.swing.JLabel;
import?javax.swing.JOptionPane;
import?javax.swing.JPanel;
import?javax.swing.JPasswordField;
import?javax.swing.JTextField;
import?javax.swing.border.EmptyBorder;
import?Controller.CustomerController;
import?Customer.Customer;
import?myComp.MyPicPanel;
public?class?LoginForm?extends?BaseDialog{
????private?JPanel?pnlMain?=?null;
????private?JPanel?pnlTop?=?null;
????private?JPanel?pnlUsername?=?null;
????private?JPanel?pnlPassword?=null;
????private?JPanel?pnlButton?=?null;
????private?JLabel?lblUsername?=?null;
????private?JLabel?lblPassword=?null;
????private?JButton?btnExit=?null;
????private?JButton?btnLogin=?null;
????private?JTextField?txtUsername=?null;
????private?JPasswordField?txtPassword=?null;
????public?LoginForm(){
????????pnlTop?=?new?MyPicPanel("images/2.jpg",400,90);
????????pnlTop.setPreferredSize(new?Dimension(400,90));
????????this.add(pnlTop,?BorderLayout.NORTH);
????????pnlMain?=?new?JPanel();
????????pnlMain.setLayout(new?BorderLayout());
????????pnlMain.setBorder(new?EmptyBorder(5,0,0,0));
????????pnlMain.setBackground(Color.LIGHT_GRAY);
????????this.add(pnlMain,?BorderLayout.CENTER);
????????initUI();
????}
????public?void?initUI(){
????????//user?name?panel
????????pnlUsername?=?new?JPanel();
????????pnlUsername.setPreferredSize(new?Dimension(this.getWidth(),60));
????????pnlUsername.setBorder(new?EmptyBorder(10,0,0,0));
????????pnlMain.add(pnlUsername,BorderLayout.NORTH);
????????//password?panel
????????pnlPassword?=?new?JPanel();
????????pnlPassword.setPreferredSize(new?Dimension(this.getWidth(),60));
????????pnlMain.add(pnlPassword,BorderLayout.CENTER);
????????//button?panel
????????pnlButton?=?new?JPanel();
????????pnlButton.setPreferredSize(new?Dimension(this.getWidth(),60));
????????pnlMain.add(pnlButton,BorderLayout.SOUTH);
????????addUsername(pnlUsername);
????????addPassword(pnlPassword);
????????addButton(pnlButton);
????}
?????public?ActionListener?onclickListener?=?new?ActionListener(){
????????@Override
????????public?void?actionPerformed(ActionEvent?e){
????????????JButton?jb?=?(JButton)e.getSource();
????????????if(jb.getActionCommand().equals("login")){
????????????????if(checkInput()){
????????????????????????if(isCorrect()){
????????????????????????????Mainform?main?=?new?Mainform();
????????????????????????????dispose();
????????????????????????}
????????????????????}else{
????????????????????JOptionPane.showMessageDialog(null,?"登錄失敗","Gourmet?Coffee?System",
????????????????????????????JOptionPane.ERROR_MESSAGE);
????????????????}
????????????}else?if(jb.getActionCommand().equals("exit")){
????????????????System.exit(0);
????????????}
????????}
????};
????private?void?addPassword(JPanel?pnlPassword)?{
????????JLabel?lblPassword?=?new?JLabel("Password");
????????lblPassword.setFont(new?Font("Microsoft?YaHei?UI",Font.BOLD,20));
????????pnlPassword.add(lblPassword);
????????txtPassword?=?new?JPasswordField(10);?
????????pnlPassword.add(txtPassword);
????}
????private?void?addUsername(JPanel?pnlUsername)?{
????????JLabel?lblUsername?=?new?JLabel("Account");
????????lblUsername.setFont(new?Font("Microsoft?YaHei?UI",Font.BOLD,20));
????????pnlUsername.add(lblUsername);
????????txtUsername?=?new?JTextField(10);
????????pnlUsername.add(txtUsername);
????}
????//默認FlowLayout
????????private?void?addButton(JPanel?pnlButton)?{
????????????btnLogin?=?new?JButton("Login");
????????????btnLogin.setActionCommand("login");
????????????btnLogin.addActionListener(onclickListener);
????????????pnlButton.add(btnLogin);
????????????btnExit?=?new?JButton("Exit");
????????????btnExit.setActionCommand("exit");
????????????btnExit.addActionListener(onclickListener);
????????????pnlButton.add(btnExit);
????????}
????public?boolean?isCorrect(){
????????boolean?flag?=?true;
????????CustomerController?userManager?=??new?CustomerController();
????????ArrayList<Customer>?customers?=?userManager.readObject("information","Customer.txt");
????????for(Customer?customer:?customers){
????????????if(customer.getAccount().equals(txtUsername.getText().trim()))
????????????{
????????????????if((String.valueOf(txtPassword.getPassword().equals(customer.getPassword())))?!=?null){
????????????????????flag?=?true;
????????????????}
????????????}
????????}
????????return?flag;
????}
????public?boolean?checkInput(){
????????boolean?flag?=?true;
????????if(txtUsername.getText().trim().isEmpty()){
????????????this.showMessage("賬號不許為空!");
????????????txtUsername.requestFocus();
????????????flag?=?false;
????????}
????????if(String.valueOf(txtPassword.getPassword()).trim().isEmpty()){
????????????this.showMessage("密碼不許為空!");
????????????txtPassword.requestFocus();
????????????flag?=?false;
????????}
????????return?flag;
????}
????public?void?showMessage(String?msg){
????????JOptionPane.showMessageDialog(null,?msg,this.getTitle(),JOptionPane.ERROR_MESSAGE);
????}
}輸出界面是這樣:但是每次輸入用戶名和密碼(只要不是空,無論輸入什么)都會報空指針異常。這是異常片段:Exception?in?thread?"AWT-EventQueue-0"?java.lang.NullPointerException
????at?UI.Mainform.removeButton(Mainform.java:134)
????at?UI.Mainform.<init>(Mainform.java:71)
????at?UI.LoginForm$1.actionPerformed(LoginForm.java:95)折磨了我整整一個下午加晚上…明天就要交了 求救啊各位大佬……
添加回答
舉報
0/150
提交
取消