【发布时间】:2021-04-03 21:05:25
【问题描述】:
我正在开发一个登录验证器,并有一个检查用户名和密码有效性的类。检查后,在 LoginProxy 类中更新了一个布尔变量(isValidLoginCredentials),可以通过 get 方法获取该变量并用于其他目的。但是,get 方法返回的值始终是我在创建类时分配给 isValidLoginCredentials 的默认值。我认为问题在于我在有机会更新 isValidLoginCredentials 之前调用了 main() 中的 getter 方法,但我不明白应该进行哪些更改来阻止这种情况。这是类和主程序的相关部分。
public class LoginProxy implements ActionListener
{
private JLabel usernameLabel;
private JTextField usernameText;
private JLabel passwordLabel;
private JPasswordField passwordText;
private JButton loginButton;
private boolean isValidLoginCredentials = false;
public void createLogin()
{
/*Here was code irrelevant to the problem I removed*/
loginButton.addActionListener(new LoginProxy());
loginButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String user = usernameText.getText();//get the username
String pass = passwordText.getText();//get the password
String credentials = user +":"+pass;//creates the string I compare to other valid
//credentials
ConcreteLoginValidator validator = new ConcreteLoginValidator(credentials);
try
{
isValidLoginCredentials = validator.checkLogin();
System.out.println("The credentials are "+isValidLoginCredentials);
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
}
});
}
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
}
public boolean getValidity()
{
return isValidLoginCredentials;
}
这里是主要方法
public static void main(String[] args)
{
boolean isValidLogin = false;
LoginProxy proxy = new LoginProxy();
proxy.createLogin();
isValidLogin = proxy.getValidity();
if(isValidLogin == true)
{
JFrame frame = MainUI.getInstance();
frame.setSize(900, 600);
frame.pack();
frame.setVisible(true);
}
}
我应该添加什么以便 isValidLogin=proxy.getValidity();只有在我已经输入并检查登录凭据是否正确后才返回一个值?
【问题讨论】:
-
你不希望你的主线程阻塞;操作系统会认为它已被锁定并考虑将其杀死。如果您想在事件之后发生某些事情,请使用事件侦听器,就像您在上面的 sn-p 中使用
addActionListener所做的那样。 -
actionPerformed()方法是您要检查登录是否有效并基于此采取任何操作的地方。然而,当前的实现似乎相当繁琐,因为您的LoginProxy创建了另一个LoginProxy实例以在某个按钮上注册它——无论出于何种原因。
标签: java execution program-flow