#java #jframe #joptionpane #jdialog
#java #jframe #joptionpane #jdialog
Вопрос:
Я внедрил базовую систему входа в систему, которая разбивает текстовый файл (имя: фамилия: Город: имя пользователя: пароль)
Гарольд: Фишер: Сан-Франциско: 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()) amp;amp; 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. Имеет ли
UserDetails.txt
файл больше строк?
Ответ №1:
Я наблюдал поведение, которое вы объясняете, когда UserDetails.txt
файл состоит из двух строк. Например.
Гарольд: Фишер: Сан-Франциско: hf45: 1234
Джон : Сноу: Сан-Франциско: js45 : 5678
В приведенном выше файле с двумя строками ниже «Program with the problem» выводится поведение, которое вы объясняете (печатаются как «Показать JFrame», так и «Показать диалоговое окно»).
Проблема в том, что в while
цикле вы пытаетесь отобразить JFrame
диалоговое окно для каждой строки в файле.
Попробуйте ниже «Исправленная программа». При этом я использую boolean
переменную matched
для сохранения того, найдено ли совпадение. А затем покажите JFrame
диалоговое окно or после 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()) amp;amp; 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()) amp;amp; 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");
}
}
}