2017-02-12 3 views
-1

Ich habe einen Fehler bekommt, während in diesem Java Swing Code Benutzername und Passwort Validierung:Fehler in Anmeldeformular geschrieben Java Swing mit (mit Datenbank-Datei)

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; 
    } 
} 

ich zusammengestellt und diesen Code ausführen, und ich hatte dieser "Fehler":
".
Dieser Benutzer existiert nicht
Für erstellen Sie einen Benutzer, bearbeiten 'database.lfrm' Datei
"
My 'database.lfrm' Datei ist gefällt das:
"
JavaUser $ adimn
"

Antwort

2

ich das Problem erraten ist hier:

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

Wenn Sie dies tun, werden Sie überprüfen, ob "user" und der String [] Element das gleiche Objekt sind, die ist nicht wahr, da das String [] -Element ein anderes Objekt ist, das Sie gerade für diese Validierung erstellen.

Was Sie wollen, ist zu prüfen, ob der Inhalt des „user“ Array und dem nächsten Array gleich sind, was Sie diese Zeile durch den Ersatz lösen kann:

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

Danke für Antwort. Das ist richtig. – Muskovets