You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing登录窗口布尔值判断失效问题求助

问题原因

你遇到的核心问题是Swing的事件驱动模型和线程执行顺序:

  • 当你在startMenus()里调用loginWindow()显示登录窗口后,main线程会立刻往下执行if (loginFront.authenticated)判断。这时候用户还没点击登录按钮,authenticated还是默认的false,所以这个if分支直接跳过。
  • 等你后续点击登录按钮修改authenticated为true时,那个if语句早就执行完了,自然不会有任何响应。
解决方案

有两种简单的修复方式,根据你的需求选择:

方案1:直接在登录成功的回调里执行逻辑

把System.exit(0)直接放到登录按钮的点击事件中,验证通过后立刻执行:
修改login类的ActionListener代码:

login_btn.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        char[] inputPass = pwd_field.getPassword();
        char[] appPass = login.pass.toCharArray();
        
        if (Arrays.equals(inputPass, appPass) && usr.equals(usr_field.getText()))
        {
            authenticated = true;
            frame.dispose(); // 关闭登录窗口
            System.exit(0); // 登录成功后直接退出程序
        }
        else
        {
            authenticated = false;
            incorrect.setVisible(true);
        }
    }
});

方案2:使用模态对话框阻塞main线程

把登录窗口改成模态JDialog,这样调用loginWindow()时,main线程会暂停,直到登录窗口关闭,之后再判断authenticated的值:

  1. 修改login类的loginWindow()方法:
public static void loginWindow()
{
    // 用JDialog替代JFrame,设置为模态
    JDialog dialog = new JDialog(null, "Login", true);
    dialog.getContentPane().setBackground(new Color(74, 74, 74));
    dialog.getContentPane().setLayout(new MigLayout("", "[grow]", "[grow]"));
     
    JPanel panel = new JPanel();
    panel.setBackground(new Color(74, 74, 74));
    dialog.getContentPane().add(panel, "cell 0 0,grow");
    panel.setLayout(null);
    
    // 下面的组件创建、添加逻辑和原来完全一致
    
    incorrect.setVisible(false);
    dialog.setSize(310, 230);
    dialog.setResizable(false);
    dialog.setVisible(true); // 这里会阻塞线程,直到对话框关闭
}
  1. 此时main类的startMenus()不需要修改,因为loginWindow()会阻塞到窗口关闭,之后再判断authenticated的值就会是你点击按钮后设置的结果。
额外提醒

你的代码里存在类名不一致的问题:menu包下的类叫login,但main类里导入的是menu.loginFront,运行时会报错,需要改成import menu.login;,然后调用login.loginWindow()和login.authenticated。

内容的提问来源于stack exchange,提问作者ghostman1337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:54:59