Java jFrame登录屏幕,在netbeans中读取2个文本文件
所以我开始为我的PAT 12年级任务创建这个项目,我遇到了一个减速带。。。 我在netbeans中有一个使用jFrame的登录屏幕。 我的问题是,我使用2个文本文件来存储数据:1个用于用户名,1个用于密码。它们使用扫描仪读取,并用#分隔。 关键是,我使用while循环验证用户名,但无法验证与另一个文本文件中的用户名对应的密码 因此,您可以想象两个文本文件:Java jFrame登录屏幕,在netbeans中读取2个文本文件,java,netbeans,text-files,Java,Netbeans,Text Files,所以我开始为我的PAT 12年级任务创建这个项目,我遇到了一个减速带。。。 我在netbeans中有一个使用jFrame的登录屏幕。 我的问题是,我使用2个文本文件来存储数据:1个用于用户名,1个用于密码。它们使用扫描仪读取,并用#分隔。 关键是,我使用while循环验证用户名,但无法验证与另一个文本文件中的用户名对应的密码 因此,您可以想象两个文本文件: 用户名 密码 单击“登录”按钮时,它使用while循环检查用户名是否已存在。如果存在,请继续输入密码,否则“用户名不存在”。当匹配另一个
- 用户名
- 密码
package Battlefield4;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Login extends javax.swing.JFrame
{
String Username;
String Password;
public Login()
{
initComponents();
}
//Can not edit from here on
private void initComponents() {
txtUsername = new javax.swing.JTextField();
txtPassword = new javax.swing.JTextField();
lblPassword = new javax.swing.JLabel();
lblUsername = new javax.swing.JLabel();
btnLogin = new javax.swing.JButton();
btnCreate = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setSize(new java.awt.Dimension(854, 480));
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
getContentPane().add(txtUsername, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 150, 210, -1));
getContentPane().add(txtPassword, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 220, 210, -1));
lblPassword.setText("Password");
getContentPane().add(lblPassword, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 200, -1, -1));
lblUsername.setText("Username");
getContentPane().add(lblUsername, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 130, -1, -1));
btnLogin.setText("Login");
btnLogin.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLoginActionPerformed(evt);
}
});
getContentPane().add(btnLogin, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 290, -1, -1));
btnCreate.setText("Create");
btnCreate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCreateActionPerformed(evt);
}
});
getContentPane().add(btnCreate, new org.netbeans.lib.awtextra.AbsoluteConstraints(460, 290, -1, -1));
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Battlefield4/Batfield/Background/Login (Small).jpg"))); // NOI18N
jLabel1.setText("jLabel1");
getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 860, 480));
pack();
}
//Can not edit before this
private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {
//This is from where Netbeans lets you edit your code.
try {
File user = new File("C:\\Users\\John1012\\Documents\\NetBeansProjects\\PATProject\\src\\Battlefield4\\Batfield\\Users\\Username.txt"); //To create a universal file for Input & Output
File pass = new File("C:\\Users\\John1012\\Documents\\NetBeansProjects\\PATProject\\src\\Battlefield4\\Batfield\\Users\\Password.txt"); //To create a universal file for Input & Output
user.getParentFile().mkdirs(); //To denote the parent file
pass.getParentFile().mkdirs(); //To denote the parent file
Scanner scUser = new Scanner(user).useDelimiter("#"); //To scan the Username file
Scanner scPass = new Scanner(pass).useDelimiter("#");
Username = txtUsername.getText(); //This gets the user input
Password = txtPassword.getText(); //This gets the user input
int pos = 0; //Indicates the position of the Username in the save file
while(scUser.hasNext())
{
pos = pos + 1;
if(scUser.equals(Username))
{ //This is where it fails
for (int i = 0; i <= 5; i++)
{
while(scPass.hasNext())
{
System.out.print(scPass);
}
}
if(scPass.equals(Password))
{
new Selection().setVisible(true);
this.dispose();
}
else
{
JOptionPane.showMessageDialog(null,"Incorrect Password!");
}
}//This is where it works from. The above code is sketchy
else
{
JOptionPane.showMessageDialog(null,"User Does Not Exist!");
}
scUser.close();
}
}
catch (FileNotFoundException ex)
{
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
catch (IOException ex)
{
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void btnCreateActionPerformed(java.awt.event.ActionEvent evt) {
//Again this is from where Netbeans lets you edit
try {
File user = new File("C:\\Users\\John1012\\Documents\\NetBeansProjects\\PATProject\\src\\Battlefield4\\Batfield\\Users\\Username.txt"); //To create a universal file for Input & Output
File pass = new File("C:\\Users\\John1012\\Documents\\NetBeansProjects\\PATProject\\src\\Battlefield4\\Batfield\\Users\\Password.txt"); //To create a universal file for Input & Output
user.getParentFile().mkdirs(); //To denote the parent file
pass.getParentFile().mkdirs(); //To denote the parent file
Scanner scUser = new Scanner(user); //To scan the Username file
Username = txtUsername.getText(); //This gets the user input
Password = txtPassword.getText(); //This gets the user input
if(scUser.nextLine().contains(Username)) //This reads the entire line and checks for an indexOf of those characters
{
JOptionPane.showMessageDialog(null,"User Already Exists!");
scUser.close(); //Close the Scanner
}
else
{
scUser.close(); //Close the Scanner
if("".equals(Password) || " ".equals(Password)) //Checks to see whether or not the user entered a password
{
JOptionPane.showMessageDialog(null,"Please Enter A Password!");
}
else
{
PrintWriter pwUser = new PrintWriter(new FileWriter(user,true)); //To Write to the Username file
PrintWriter pwPass = new PrintWriter(new FileWriter(pass,true)); //To Write to the Password file
pwUser.print(Username + "#");
pwPass.print(Password + "#");
pwUser.close();
pwPass.close();
new Selection().setVisible(true);
this.dispose();
}
}
scUser.close();
}
catch (FileNotFoundException ex)
{
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
catch (IOException ex)
{
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
//Can no longer edit here
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Login().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btnCreate;
private javax.swing.JButton btnLogin;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel lblPassword;
private javax.swing.JLabel lblUsername;
private javax.swing.JTextField txtPassword;
private javax.swing.JTextField txtUsername;
// End of variables declaration
}
包战场4;
导入javax.swing.*;
导入java.util.*;
导入java.io.*;
导入java.util.logging.Level;
导入java.util.logging.Logger;
公共类登录扩展了javax.swing.JFrame
{
字符串用户名;
字符串密码;
公共登录()
{
初始化组件();
}
//从此处无法编辑
私有组件(){
txtUsername=newjavax.swing.JTextField();
txtPassword=newjavax.swing.JTextField();
lblPassword=newjavax.swing.JLabel();
lblUsername=newjavax.swing.JLabel();
btnLogin=newjavax.swing.JButton();
btnCreate=newjavax.swing.JButton();
jLabel1=newjavax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setSize(新java.awt.Dimension(854480));
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
getContentPane().add(txtUsername,new org.netbeans.lib.awtextra.AbsoluteConstraints(320150210,-1));
getContentPane().add(txtPassword,new org.netbeans.lib.awtextra.AbsoluteConstraints(320220210,-1));
lblPassword.setText(“密码”);
getContentPane().add(lblPassword,new org.netbeans.lib.awtextra.AbsoluteConstraints(320200,-1,-1));
lblUsername.setText(“用户名”);
getContentPane().add(lblUsername,new org.netbeans.lib.awtextra.AbsoluteConstraints(320130,-1,-1));
btnLogin.setText(“登录”);
btnLogin.addActionListener(新的java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
执行的BTN(evt);
}
});
getContentPane().add(btnLogin,new org.netbeans.lib.awtextra.AbsoluteConstraints(320290,-1,-1));
btnCreate.setText(“创建”);
btnCreate.addActionListener(新的java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
执行的BTN创建操作(evt);
}
});
getContentPane().add(btnCreate,new org.netbeans.lib.awtextra.AbsoluteConstraints(460290,-1,-1));
jLabel1.setIcon(新的javax.swing.ImageIcon(getClass().getResource(“/Battlefield4/Batfield/Background/Login(Small.jpg”));//NOI18N
jLabel1.setText(“jLabel1”);
getContentPane().add(jLabel1,new org.netbeans.lib.awtextra.AbsoluteConstraints(0,0860480));
包装();
}
//在此之前无法编辑
私有void btnLoginActionPerformed(java.awt.event.ActionEvent evt){
//这是Netbeans允许您编辑代码的地方。
试一试{
File user=new File(“C:\\Users\\John1012\\Documents\\NetBeansProjects\\PATProject\\src\\Battlefield4\\Batfield\\Users\\Username.txt”);//为输入和输出创建通用文件
File pass=new File(“C:\\Users\\John1012\\Documents\\NetBeansProjects\\PATProject\\src\\Battlefield4\\Batfield\\Users\\Password.txt”);//为输入和输出创建通用文件
user.getParentFile().mkdirs();//表示父文件
pass.getParentFile().mkdirs();//表示父文件
Scanner scUser=new Scanner(user)。使用分隔符(“#”);//扫描用户名文件
Scanner scPass=新扫描仪(pass)。使用分隔符(“#”);
Username=txtUsername.getText();//这将获取用户输入
Password=txtPassword.getText();//这将获取用户输入
int pos=0;//表示用户名在保存文件中的位置
while(scUser.hasNext())
{
pos=pos+1;
if(scUser.equals(用户名))
{//这就是它失败的地方
for(int i=0;i在启动时映射所有用户,然后只需检查映射。使用split分隔用户名和密码。在调用onLoginCorrect()之前,检查输入是否为空
private static final Logger LOG=LogManager.getLogger();
私有最终映射用户=新ConcurrentHashMap();
公共登录(){
超级();
final InputStream resource=this.getClass().getResourceAsStream(“/users.txt”);
最终扫描仪=新扫描仪(资源);
while(scanner.hasNext()){
最终字符串输入=scanner.nextLine();
最后一个字符串[]userPw=StringUtils.split(输入“:”);
this.users.put(userPw[0],userPw[1]);
}
scanner.close();
IOUtils.closes(资源);
}
公共布尔值isLoginCorrect(最终字符串用户名、最终字符串密码){
最终布尔结果;
if(StringUtils.equals(this.users.get(用户名)、密码)){
结果=真;
}否则{
Login.LOG.warn(“没有这样的用户”);
结果=假;
}
返回结果;
}
所以我想出了办法。谢谢大家的帮助
我将此作为一种更简单的方法发布到@Tobi,希望能帮助那些没有那么先进或需要更简单帮助的人
private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {
try {
File user = new File("src\\Battlefield4\\Batfield\\Users\\Username.txt"); //To create a universal file for Input & Output
File pass = new File("src\\Battlefield4\\Batfield\\Users\\Password.txt"); //To create a universal file for Input & Output
user.getParentFile().mkdirs(); //To denote the parent file
pass.getParentFile().mkdirs(); //To denote the parent file
Scanner scUser = new Scanner(user).useDelimiter("#"); //To scan the Username file
Scanner scPass = new Scanner(pass).useDelimiter("#"); //To scan the password file
username = txtUsername.getText(); //This gets the user input
password = txtPassword.getText(); //This gets the user input
int pos = 0; //Indicates the position of the Username in the save file
boolean loggedIn = false; //Flag to check if it's logged in
while(scUser.hasNext() && scPass.hasNext()) //Runs files in congruency
{
if(scUser.next().equalsIgnoreCase(username) && scPass.next().equals(password))
{
loggedIn = true;
scUser.close();
scPass.close();
new Selection(username).setVisible(true);
this.dispose();
break;
}
}
scUser.close();
scPass.close();
if(loggedIn == false)
{
JOptionPane.showMessageDialog(null,"Incorrect Username or Password!");
}
}
catch (FileNotFoundException ex)
{
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
只需使用一个文本文件,就可以编写
private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {
try {
File user = new File("src\\Battlefield4\\Batfield\\Users\\Username.txt"); //To create a universal file for Input & Output
File pass = new File("src\\Battlefield4\\Batfield\\Users\\Password.txt"); //To create a universal file for Input & Output
user.getParentFile().mkdirs(); //To denote the parent file
pass.getParentFile().mkdirs(); //To denote the parent file
Scanner scUser = new Scanner(user).useDelimiter("#"); //To scan the Username file
Scanner scPass = new Scanner(pass).useDelimiter("#"); //To scan the password file
username = txtUsername.getText(); //This gets the user input
password = txtPassword.getText(); //This gets the user input
int pos = 0; //Indicates the position of the Username in the save file
boolean loggedIn = false; //Flag to check if it's logged in
while(scUser.hasNext() && scPass.hasNext()) //Runs files in congruency
{
if(scUser.next().equalsIgnoreCase(username) && scPass.next().equals(password))
{
loggedIn = true;
scUser.close();
scPass.close();
new Selection(username).setVisible(true);
this.dispose();
break;
}
}
scUser.close();
scPass.close();
if(loggedIn == false)
{
JOptionPane.showMessageDialog(null,"Incorrect Username or Password!");
}
}
catch (FileNotFoundException ex)
{
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}