Я работаю над логином/паролем с помощью графического интерфейса. Я использую цикл while с расширением hasNext() имени файла в качестве условия для сохранения информации, содержащейся в файле, в массив, чтобы я мог сравнить ввод пользователя с информацией, хранящейся в файле. Затем я использую оператор if для сравнения. Если есть совпадение, то программа перенаправляет пользователя к другому классу или методу, иначе ничего не делает.
Проблема в том, что я продолжаю выдавать исключение ArrayOutOfBounds, как только оно пытается прочитать первую строку из файла.
Я добавил System.out.println(userLogin[i]), чтобы увидеть, зациклился ли он до конца, но это не должно быть так, поскольку строка никогда не выводится. Я предполагаю, что он останавливается первым делом, как только попадает в цикл while. Как это исправить? Ваша помощь очень ценится. Если вам нужно, чтобы я прояснил вопрос, скажите об этом в своем комментарии, и я отредактирую свой пост, чтобы он был максимально ясным. Это мой код следующим образом:
private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
String usernameInput = "";
char passwordInput[] = {};
if(e.getSource() == okButton){
usernameInput = usernameTF.getText();
passwordInput = passwordTF.getPassword();
try{
verifyLogin(usernameInput, passwordInput); //sends input to be verified
}catch (IOException ed){
JOptionPane.showMessageDialog(null, "There was a problem " +
"retrieving the data.");
}
}else if (e.getSource() == cancelButton){
setVisible(false);
dispose();
}
}
}
Это был класс и метод, который должен был передавать введенные пользователем имя пользователя и пароль методу, который проверяет, совпадают ли они с тем, что хранится в файле.
Это метод, который проверяет совпадение ввода:
public void verifyLogin(String username, char[] password) throws IOException {
File myFile = new File("Accounts.txt");
Scanner inputFile = new Scanner(myFile);
while (inputFile.hasNext()) {
int i = 0;
this.userLogin[i] = inputFile.next();
System.out.println(userLogin[i]); //says this is where the OutOfBounds occurs
this.passLogin[i] = inputFile.nextLine();
this.passwordCheckLogin = this.passLogin[i].toCharArray();
if((this.userLogin[i] == username) && (this.passwordCheckLogin == password)){
JOptionPane.showMessageDialog(null, "Access Granted");
inputFile.close();
break;
}
i++;
}
}
Информация в файле записывается следующим образом (имя пользователя слева, а затем пароль справа):
John001 bananas
Mike001 123chocolate
Благодарю вас!
Вот весь код, извините, что не включил его раньше. Надеюсь, это поможет вам, ребята, лучше понять мой вопрос. Еще раз спасибо, что нашли время ответить.
import java.util.Scanner;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
public class DeskLogin extends JFrame {
private final int WINDOW_WIDTH = 200;
private final int WINDOW_HEIGHT = 300;
private JLabel usernameLabel;
private JLabel passwordLabel;
private JButton okButton;
private JButton cancelButton;
private JTextField usernameTF;
private JPasswordField passwordTF;
private JPanel loginPanel;
private String userLogin[] = {};
private String passLogin[] = {};
private char passwordCheckLogin[] = {};
public DeskLogin(){
super("Login");
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
buildPanel();
add(loginPanel);
}
private void buildPanel() {
usernameLabel = new JLabel("Username: ");
passwordLabel = new JLabel("Password: ");
usernameTF = new JTextField(10);
passwordTF = new JPasswordField(10);
okButton = new JButton("OK");
cancelButton = new JButton("Cancel");
loginPanel = new JPanel();
loginPanel.add(usernameLabel);
loginPanel.add(usernameTF);
loginPanel.add(passwordLabel);
loginPanel.add(passwordTF);
loginPanel.add(okButton);
loginPanel.add(cancelButton);
okButton.addActionListener(new ButtonListener());
cancelButton.addActionListener(new ButtonListener());
}
public void verifyLogin(String username, char[] password) throws IOException {
File myFile = new File("Accounts.txt");
Scanner inputFile = new Scanner(myFile);
inputFile.useDelimiter(" ");
while (inputFile.hasNext()) {
int i = 0;
this.userLogin[i] = inputFile.next();
System.out.println(userLogin[i]);
this.passLogin[i] = inputFile.nextLine();
this.passwordCheckLogin = this.passLogin[i].toCharArray();
if((this.userLogin[i] == username) && (this.passwordCheckLogin == password)){
JOptionPane.showMessageDialog(null, "Access Granted");
inputFile.close();
break;
}
i++;
}
}
private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
String usernameInput = "";
char passwordInput[] = {};
if(e.getSource() == okButton){
usernameInput = usernameTF.getText();
passwordInput = passwordTF.getPassword();
try{
verifyLogin(usernameInput, passwordInput);
}catch (IOException ed){
JOptionPane.showMessageDialog(null, "There was a problem " +
"retrieving the data.");
}
}else if (e.getSource() == cancelButton){
setVisible(false);
dispose();
}
}
}
}
i
всегда равно 0). Можете ли вы дать нам самодостаточный фрагмент кода, который действительно демонстрирует проблему? То, что вы дали нам, является черновой копией, которая не точно воспроизводит ваш код. - person Mark Peters   schedule 06.12.2012userLogin[]
? - person Extreme Coders   schedule 06.12.2012i=0
, аthis.userLogin[i] = inputFile.next();
работает,System.out.println(userLogin[i]);
никак не дастIndexOutOfBoundException
. Пожалуйста, пересмотрите свой код. Проблема в другом. Такжеi++;
в конце бесполезно, так какi
в начале устанавливается на0
. - person Yogendra Singh   schedule 06.12.2012