2015-01-24 7 views
-1

Я создаю программу входа в систему на Java. Я почти закончил работу так сильно, но у меня есть последняя проблема. Я хотел, чтобы моя программа имела всего 3 попытки входа в систему до того, как она закрылась, дело в том, что после ввода неправильного прохода и пользователя он продолжает цикл без повторного ввода имени пользователя и пароля, а затем закрывается после 3 циклов. Пожалуйста помогите.Looping not Working java

package password; 

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

public class Password extends JFrame { 


public JPasswordField pass; 
public JLabel usernameL,passwordL; 
public JTextField usernameTF,passwordTF; 
private JButton LogInB,CancelB; 
private LogInButtonHandler logHandler; 
private CancelButtonHandler canHandler; 


public Password(){ 
    usernameL=new JLabel("Username"); 
    passwordL=new JLabel("Password"); 
    usernameTF=new JTextField(20); 
    passwordTF=new JTextField(20); 
    pass=new JPasswordField(10); 


    pass.setEchoChar ('•'); 

    LogInB=new JButton("Log In"); 
    logHandler=new LogInButtonHandler(); 
    LogInB.addActionListener(logHandler); 

    CancelB=new JButton("Cancel"); 
    canHandler=new CancelButtonHandler(); 
    CancelB.addActionListener(canHandler); 

    setTitle("Log In"); 
    Container p=getContentPane(); 
    p.setLayout(new GridLayout(3,3)); 

    p.add(usernameL); 
    p.add(usernameTF); 
    p.add(passwordL); 
    p.add(pass); 
    p.add(LogInB); 
    p.add(CancelB); 



    setSize(300,200); 
    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 

} 

    private class LogInButtonHandler implements ActionListener{ 
     @Override 
     public void actionPerformed(ActionEvent e) { 


     String password=null; 
     String user=null; 
     boolean isValid; 



     Scanner in= new Scanner(System.in); 




     for(int i=0;i<3;i++) 
     { 

     try { 
      if(i!=0) 
      { 
       JOptionPane.showMessageDialog(null,"Username/Password Inccorect Please Try Again: "+i,"Error",JOptionPane.ERROR_MESSAGE); 
      } 

      if(i==2) 
      { 
       JOptionPane.showMessageDialog(null,"This " +(++i) + "rd login will be your final attempt","Error",JOptionPane.ERROR_MESSAGE); 
      } 





      isValid=isValidCred(user,password); 
      if(isValid) 
      { 
       JOptionPane.showMessageDialog(null,"Welcome "+user,"Succesful",JOptionPane.INFORMATION_MESSAGE); 
       break; 
      } 

      if(i==3) 
      { 
       JOptionPane.showMessageDialog(null,"You had "+i+" failed attempts","Error",JOptionPane.ERROR_MESSAGE); 
      } 
     } catch (IOException ex) { 

     } 
     } 

    System.exit(0); 











    } 



} 



public boolean isValidCred(String user, String password) throws FileNotFoundException, IOException 
{ 

    user = usernameTF.getText(); 
    password = pass.getText(); 
    File file=new File("C:\\login\\user.txt"); 
    File file2=new File("C:\\login\\pass.txt"); 

     BufferedReader in = new BufferedReader(new FileReader(file)); 
     String line=in.readLine(); 
     BufferedReader in2 = new BufferedReader(new FileReader(file2)); 
     String line2=in2.readLine(); 


    if (user.equals(line) && password.equals(line2)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
    } 




private class CancelButtonHandler implements ActionListener{ 
    @Override 
    public void actionPerformed (ActionEvent e){ 
     dispose(); 
    } 
} 

    public static void main(String[] args) { 
     Password pass=new Password(); 
    } 

} 

ответ

1

Вы не хотите петлю внутри actionPerformed из LogInButtonHandler, так что цикл не будет принимать новый вход после первого отказа.

Вместо этого при каждом нажатии кнопки входа в систему необходимо увеличить некоторую переменную-член. actionPerformed из LogInButtonHandler проверит значение этой переменной, чтобы определить, какое сообщение должно отображаться пользователю.

ЮО, вероятно, нужно что-то вроде этого:

private class LogInButtonHandler implements ActionListener 
{ 
    int i = 0; 
    @Override 
    public void actionPerformed(ActionEvent e) { 

    String password=null; 
    String user=null; 
    boolean isValid; 

    if (i < 3) { 
     isValid=isValidCred(user,password); 
     if(isValid) { 
      JOptionPane.showMessageDialog(null,"Welcome "+user,"Succesful",JOptionPane.INFORMATION_MESSAGE); 
      return; 
     } 
     i++; 
    } 
    JOptionPane.showMessageDialog(null,"Username/Password Inccorect Please Try Again: "+i,"Error",JOptionPane.ERROR_MESSAGE); 

    if(i==2) { 
     JOptionPane.showMessageDialog(null,"This " +(++i) + "rd login will be your final attempt","Error",JOptionPane.ERROR_MESSAGE); 
    } else { 
     JOptionPane.showMessageDialog(null,"You had "+i+" failed attempts","Error",JOptionPane.ERROR_MESSAGE); 
    } 

} 
+0

Это правильный ответ, и поэтому я не знаю, почему вниз голосование. Противодействует голосованию. –

+0

Не могли бы вы дать мне пример о том, как это сделать? я действительно не могу понять. –

+0

@PatrickLouisFerrer См. Мое редактирование. – Eran