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

登录GUI匹配失败时未弹出JOptionPane问题求助

问题分析与修复

你的代码存在三个核心问题,直接导致匹配失败时弹窗不显示,同时还存在数据读取错误和数组越界风险:

1. 文件读取逻辑混乱

你用两个BufferedReader同时读取同一个文件,cr.readLine()每次会消耗一行数据,紧接着调用br.readLine()又会读取下一行,这会导致numbs列表只存入文件的偶数行数据,用户名和密码的对应关系完全错位,根本无法完成正确匹配。

修复:只用一个BufferedReader读取所有行:

ArrayList<String> numbs = new ArrayList<String>();
String line;
while ((line = br.readLine()) != null) {
    numbs.add(line);
}

2. for循环边界错误

循环条件i<=numbs.size()会触发IndexOutOfBoundsException——列表索引范围是0到size-1,当i等于numbs.size()时,numbs.get(i)会直接报错。同时每次i+2,要确保i+1不会超出列表范围,正确条件应为i <= numbs.size() - 2。

3. 匹配失败的判断逻辑错误

你初始化determine=0,只有匹配成功时才会修改它的值。但匹配失败时determine仍为0,而判断弹窗的条件是determine==numbs.size(),这个条件几乎不可能成立,所以弹窗永远不会触发。

修复:将determine初始化为-1,匹配成功时设为非-1的值,最后判断determine==-1时弹出提示:

int determine = -1;
// ... 匹配逻辑 ...
if (determine == -1) {
    JOptionPane.showMessageDialog(this, "try again");
}

完整修复后的代码

int determine = -1;
try {
    String p1;
    String p2;
    String password = PasswordEntered.getText();
    String username = UsernameEntered.getText();
    // 用try-with-resources自动关闭流,避免资源泄漏
    try (FileReader reader = new FileReader("LoginPages.txt");
         BufferedReader br = new BufferedReader(reader)) {
        ArrayList<String> numbs = new ArrayList<String>();
        String line;
        while ((line = br.readLine()) != null) {
            numbs.add(line);
        }
        // 确保i和i+1都不越界
        for (int i = 0; i <= numbs.size() - 2; i = i + 2) {
            p1 = numbs.get(i);
            p2 = numbs.get(i + 1);
            // 用Objects.equals避免空指针异常
            if (Objects.equals(password, p2) && Objects.equals(username, p1)) {
                determine = i;
                MainGUI x = new MainGUI();
                x.setVisible(true);
                dispose();
                // 找到匹配后直接跳出循环,无需继续遍历
                break;
            } 
        }
    }
    if (determine == -1) {
        JOptionPane.showMessageDialog(this, "try again");
    }
} catch(IOException ex) {
    JOptionPane.showMessageDialog(this, "File Not Found");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:20:27