2013-03-22 36 views
0

我有一个程序,有一个用户登录功能,提示创建一个用户名和密码,稍后将其存储到两个不同的ArrayList中。我添加了一个按钮,在创建帐户后直接进入登录,并且登录工作正常。但是,如果关闭GUI并尝试直接使用以前的登录信息登录,则无法识别用户名/密码。我的ArrayLists是否重置,或者在我的代码中有错误?如何防止我的ArrayList在Java GUI中重置?

这里是我的登录类的缩短版:

public class OptionGUI extends JPanel implements ActionListener 
{ 
    ArrayList<String>passworddatabase= new ArrayList(); 
    ArrayList<String> usernamedatabase= new ArrayList(); 
    JButton newaccount = new JButton("Create a new account"); 
    JButton login= new JButton("Login"); 
    public int response; 
    public OptionGUI() 
    { 

    newaccount.setVerticalTextPosition (AbstractButton.CENTER); 
    newaccount.setHorizontalTextPosition(AbstractButton.LEADING); 
    newaccount.setActionCommand("create"); 

    login.setVerticalTextPosition(AbstractButton.CENTER); 
    login.setHorizontalTextPosition(AbstractButton.TRAILING); 
    login.setActionCommand("login"); 
    login.setEnabled(true); 

    newaccount.addActionListener(this); 
    login.addActionListener(this); 

    add(newaccount); 
    add(login); 
    } 
    public void actionPerformed(ActionEvent e) 
    { 
    { 
     if ("create".equals(e.getActionCommand())) 
     { 

     newaccount.setEnabled(true); 
     login.setEnabled(false); 

     JPanel logininfo= new JPanel(); 
     JLabel usernameLbl= new JLabel("Choose a username:"); 
     JLabel passwordLbl= new JLabel("Choose a password:"); 
     JTextField username= new JTextField(); 
     JPasswordField password= new JPasswordField(); 

     logininfo.add(usernameLbl); 
     logininfo.add(username); 
     logininfo.add(passwordLbl); 
     logininfo.add(password); 


     logininfo.setVisible(true); 

     int input2 = JOptionPane.showConfirmDialog(frame,logininfo, "Create your account:" 
          ,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 

     char[] enteredPassword= password.getPassword(); 
     char[] enteredPassword2= passwordconfirm.getPassword(); 
     String newusername= username.getText(); 
     String newpassword= String.valueOf(enteredPassword); 
     String newpassword2= String.valueOf(enteredPassword2); 

     String[] options = { "Login", "Cancel" }; 
     response = JOptionPane.showOptionDialog(null, "Your account has been successfully created! Please login to continue.", "Confirmation",JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options,options[0]);      

      } 
     passworddatabase.add(newpassword); 
     usernamedatabase.add(newusername); 

     } 
     if ("loginbutton".equals(e.getActionCommand())|| response==0) 
     { 
     login.setEnabled(true); 
     newaccount.setEnabled(false); 
     JPanel panel= new JPanel(); 
     panel.setLayout(new GridLayout(2,2)); 
     JLabel usernameLbl = new JLabel("Username:"); 
     JLabel passwordLbl = new JLabel("Password:"); 
     JTextField username = new JTextField(); 
     JPasswordField passwordFld = new JPasswordField(); 

     panel.add(usernameLbl); 
     panel.add(username); 
     panel.add(passwordLbl); 
     panel.add(passwordFld); 

     panel.setVisible(true); 

     int input = JOptionPane.showConfirmDialog(frame, panel, "Enter your password:" 
          ,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 

     String inputPassword= String.valueOf(passwordFld); 
     String inputUsername= username.getText(); 

     for(int i=0; i < passworddatabase.size(); i++) 
     { 
     if (passworddatabase.get(i).contains(inputPassword)) 
     { 
      JOptionPane.showMessageDialog(null, "Welcome to AIR Ticket Reservation!"); 
     } 

     else 
     { JOptionPane.showMessageDialog(null, "The username or password you entered does not exist.", "Error", 
            JOptionPane.ERROR_MESSAGE); 
       } 
      }     
     } 
    } 
} 
    } 

这里是我的司机:

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 
import javax.swing.JTextArea; 
import javax.swing.JPasswordField; 
import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import java.awt.GridLayout; 
import java.util.Arrays; 
import java.awt.EventQueue; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.AbstractButton; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 

public class Driver 
{ 
    public static void main(String[] args) 
    { 

     JFrame option= new JFrame ("Ticket Reservation"); 
     option.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     option.setSize(500,300); 
     option.setLocationRelativeTo(null); 
     OptionGUI newContentPane= new OptionGUI(); 
     option.setContentPane(newContentPane); 

     option.setVisible(true); 
    }    
} 

谢谢!

回答

1

OptionGUI newContentPane= new OptionGUI();创建一个新的OptionGUI实例。

而在你OptionGUI类,你给一小块这样的代码: -

ArrayList<String> passworddatabase= new ArrayList(); 
ArrayList<String> usernamedatabase= new ArrayList(); 

因此,每次您关闭并重新打开,它会创建一个新的实例OptionGUI,这将有你的ArrayList的初始化为new ArrayList()(空数组列表)。

+0

非常感谢!你知道我怎么仍然可以运行GUI,而不必每次都创建一个新的实例? – nichi 2013-03-22 05:49:14