2017-02-12 10 views
-1

Я получил сообщение об ошибке при проверке имени пользователя и пароля в этом Java коде Swing:ошибка в форме входа писала с помощью Java Swing (с файлом базы данных)

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 
import java.util.*; 

public class LoginForm extends JFrame implements ActionListener { 
    private JButton login; 
    private JTextField name; 
    private JPasswordField pw; 

    private LoginForm() { 
     super("Log in"); 
     login = new JButton("Log in"); 
     name = new JTextField(20); 
     pw = new JPasswordField(20); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLayout(new BorderLayout()); 
     JPanel fields = new JPanel(new BorderLayout()); 
     fields.add(name, "North"); 
     fields.add(new JScrollPane(), "Center"); 
     fields.add(pw, "South"); 
     add(fields, "Center"); 
     add(new JPanel(), "South"); 
     add(new JPanel(), "North"); 
     JPanel j = new JPanel(); 
     j.setSize(100, 400); 
     j.add(login); 
     //j.add(new JLabel("|\n|\n|-> Username")); 
     setSize(600, 400); 
     add(j, "West"); 
     login.addActionListener(this); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new LoginForm(); 
    } 

    public void actionPerformed(ActionEvent evt) { 
     if (evt.getSource() == login) { 
      if (!validUser(name.getText(), pw.getPassword())) JOptionPane.showMessageDialog(null, "This user not exists.\nFor create a user,\n edit 'database.lfrm' file." 
       , "Error!", JOptionPane.ERROR_MESSAGE); 
      else JOptionPane.showMessageDialog(null, "This user is valid! Congraulations!"); 
     } else throw new RuntimeException("Event source isn't be a " + login.toString()); 
    } 
    private static boolean validUser(String name, char[] pwd) { 
     boolean res = false; 
     try { 
      BufferedReader br = new BufferedReader(new FileReader("database.lfrm")); 
      String all = "", lines[], user[], line; 
      while ((line = br.readLine()) != null) all += line; 
      lines = all.split("\n"); 
      user = Arrays.asList(lines).get(Arrays.asList(lines).indexOf(name + " $ " + new String(pwd))).split(" $ "); 
      if (user == new String[]{name, new String(pwd)}) res = true; 
     } catch (IOException e) {e.printStackTrace();} 
     return res; 
    } 
} 

Я скомпилировал и запустить этот код, и я это "ошибка":
".
Этот пользователь не существует
Для создания пользователя, редактировать 'database.lfrm' файл
"
Мой файл 'database.lfrm' это нравится это:
"
JavaUser $ adimn
"

ответ

2

Я думаю, проблема здесь:

if (user == new String[]{name, new String(pwd)}) res = true; 

Когда вы сделаете это, вы проверяете, если„пользователь“и [] элемент строки являются тот же объект, который это не так, потому что элемент String [] - это другой объект, который вы создаете только для этой проверки.

То, что вы хотите, чтобы проверить, является ли содержимое «пользователь» массива и следующий массив одни и те же, которые вы можете решить заменить эту строку:

if (Arrays.equals(user, new String[] {name, new String(pwd)})) res = true; 
+0

Спасибо за ответ. Верно. – Muskovets

 Смежные вопросы

  • Нет связанных вопросов^_^