Неправильное поведение с моей системой входа в систему JFrame и JDialog - PullRequest
0 голосов
/ 15 марта 2019

Я внедрил базовую систему входа в систему, которая разделяет текстовый файл (имя: фамилия: Город: имя пользователя: пароль)

Гарольд: Фишер: Сан-Франциско: hf45: 1234

Когда пользователь вводит свои учетные данные, он отображает JFrame, если учетные данные введены правильно, в противном случае вместо этого появится JOptionPane, сообщая пользователю, что введенные учетные данные неверны.

Вот мой код:

public class LoginFrame extends javax.swing.JFrame      {

/**
 * Creates new form LoginFrame
 */ 
String username;
String password;
String filePath = "UserDetails.txt";

public LoginFrame() {
    initComponents();


private void jButtonLoginActionPerformed(java.awt.event.ActionEvent evt) {                                             

        username = jTextFieldUsername.getText();
        password = jTextFieldPassword.getText();
        verifyLogin();  
}                                            

public void verifyLogin()
{
   try {
       File f = new File("UserDetails.txt");
       Scanner fileRead = new Scanner(f);

       while(fileRead.hasNextLine())
       {
           String textLine = fileRead.nextLine();
           String[] userDetails = textLine.split(" : ");
           String tempUsername = userDetails[3];
           String tempPassword = userDetails[4];

           if(tempUsername.trim().equals(username.trim()) && tempPassword.trim().equals(password.trim()))
                   {
                       new LibraryCatalogFrame().setVisible(true);
                   }
           else
           {
               JOptionPanes.messageBox("Please re-enter your user details", "Incorrect Username or Password");
         }
        }
       }
       catch (FileNotFoundException e)
               {
               JOptionPanes.messageBox("Error", "FileNotFound");
          }
       }

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда пользователь правильно вводит свои учетные данные, и отображаются JFrame и JOptionPane. Кроме того, когда пользователь вводит свои учетные данные неправильно, JFrame не отображается (как и предполагалось), но JOptionPane появляется дважды, а не только один раз.

1 Ответ

1 голос
/ 18 марта 2019

Я наблюдал поведение, которое вы объясняете, когда файл UserDetails.txt имеет две строки.Например,

Гарольд: Фишер: Сан-Франциско: hf45: 1234
Джон: Снег: Сан-Франциско: js45: 5678

С файлом выше, с двумя строками, ниже«Программа с проблемой» выводит объясненное вами поведение (печатаются «Показать JFrame» и «Показать диалог»).

Проблема в том, что в цикле while вы пытаетесь показать JFrameили диалоговое окно для каждой строки в файле.

Попробуйте ниже «Фиксированная программа».В этом я использую boolean переменную matched, чтобы сохранить, найдено ли совпадение.А затем показать JFrame или диалоговое окно после цикла while.

Программа с проблемой:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class LoginFrame
{
  // Hardcode user entered username and password to simplify the program
  String username = "hf45";
  String password = "1234";

  public static void main(String[] args)
  {
    new LoginFrame().verifyLogin();
  }

  public void verifyLogin()
  {
    try {
      File f = new File("UserDetails.txt");
      Scanner fileRead = new Scanner(f);

      while(fileRead.hasNextLine())
      {
        String textLine = fileRead.nextLine();
        String[] userDetails = textLine.split(" : ");
        String tempUsername = userDetails[3];
        String tempPassword = userDetails[4];

        if(tempUsername.trim().equals(username.trim()) && tempPassword.trim().equals(password.trim()))
        {
          //new LibraryCatalogFrame().setVisible(true);
          System.out.println("Show JFrame");
        }
        else
        {
          System.out.println("Show dialog");
          //JOptionPanes.messageBox("Please re-enter your user details", "Incorrect Username or Password");
        }
      }
    }
    catch (FileNotFoundException e)
    {
      e.printStackTrace();
      //JOptionPanes.messageBox("Error", "FileNotFound");
    }
  }
}

Вывод:
Показать JFrame
Показать диалог

Фиксированная программа:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class LoginFrame
{
  // Hardcode user entered username and password to simplify the program
  String username = "hf45";
  String password = "1234";

  public static void main(String[] args)
  {
    new LoginFrame().verifyLogin();
  }

  public void verifyLogin()
  {
    try {
      File f = new File("UserDetails.txt");
      Scanner fileRead = new Scanner(f);

      boolean matched = false;
      while(fileRead.hasNextLine())
      {
        String textLine = fileRead.nextLine();
        String[] userDetails = textLine.split(" : ");
        String tempUsername = userDetails[3];
        String tempPassword = userDetails[4];

        if(tempUsername.trim().equals(username.trim()) && tempPassword.trim().equals(password.trim()))
        {
          matched = true;
          break;
        }
      }

      if (matched)
      {
        //new LibraryCatalogFrame().setVisible(true);
        System.out.println("Show JFrame");
      }
      else
      {
        System.out.println("Show dialog");
        //JOptionPanes.messageBox("Please re-enter your user details", "Incorrect Username or Password");
      }
    }
    catch (FileNotFoundException e)
    {
      e.printStackTrace();
      //JOptionPanes.messageBox("Error", "FileNotFound");
    }
  }
}
...