JFrame关闭时保存数据代码报错:super.windowClosing(e)缺失分号致无法运行
问题解决步骤
核心错误修正
- 监听器添加方式错误:JFrame的
add()方法用于添加UI组件,添加窗口监听器必须使用addWindowListener(),这是你最初遇到Cannot resolve method 'add(WindowAdapter)'的原因。 - 语法混乱清理:自动生成的
super.windowClosing(e)后面的注释和多余大括号是语法错误的源头,需要删除多余符号并补充分号;同时移除代码中多余的嵌套大括号。 - 移除不必要的线程:窗口监听器无需放在单独线程中,直接绑定到JFrame即可,线程在这里属于冗余代码。
完善文件写入逻辑
原代码仅遍历了嵌套Map但未执行实际写入操作,需要补充writer.write()语句,将键值对写入文件;内层Map的字符数组值可以通过new String(charArray)转换为字符串后写入。
修正后的完整代码
// 直接给frame添加窗口监听器,无需线程 frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); // 补充分号,清理多余注释和大括号 try { FileWriter writer = new FileWriter("Registry.txt"); // 遍历外层Map for (String key : loginRegistry.keySet()) { writer.write(key + "\n"); // 写入外层键 // 遍历内层Map Map<String, char[]> innerMap = loginRegistry.get(key); for (String innerKey : innerMap.keySet()) { writer.write("\t" + innerKey + ": " + new String(innerMap.get(innerKey)) + "\n"); // 用\t缩进区分层级,字符数组转字符串写入 } } writer.close(); frame.dispose(); System.exit(0); } catch (IOException x) { x.printStackTrace(); } } });
内容的提问来源于stack exchange,提问作者person
相关产品推荐
相关产品推荐

