按回车没反应是因为 nextInt() 等方法不消费换行符,导致 nextLine() 立即读到空字符串;应统一用 nextLine() 后解析,或在 nextInt() 后加 nextLine() 清缓存。

用 Scanner 读取用户输入时为什么按回车没反应?
常见现象是程序卡在 scanner.nextLine(),尤其在混合使用 nextInt() 或 next() 后——因为它们不消费换行符,导致后续 nextLine() 立即读到空字符串并“跳过”。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 统一用
nextLine()读所有输入,再手动解析数字(如Integer.parseInt(line)) - 若必须用
nextInt(),紧接调用一次scanner.nextLine()清掉残留换行符 - 避免在循环中反复创建
Scanner实例,复用同一个对象
保存文件时中文乱码,FileWriter 和 OutputStreamWriter 怎么选?
FileWriter 默认用平台编码(Windows 是 GBK),Linux/macOS 多为 UTF-8,跨平台必出乱码;它不支持显式指定字符集。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 改用
OutputStreamWriter包装FileOutputStream,强制指定"UTF-8" - 写入前检查目标路径是否存在父目录,用
file.getParentFile().mkdirs()创建 - 别直接拼接路径字符串,用
Paths.get(dir, filename)+toFile()更安全
try (OutputStreamWriter writer = new OutputStreamWriter(
new FileOutputStream(file), StandardCharsets.UTF_8)) {
writer.write(content);
}
如何让记事本支持“撤销上一步编辑”而不存多份文件?
真正轻量的撤销不是备份文件,而是缓存文本状态。每次保存/修改前,把当前全文快照存入 ArrayList,用索引模拟栈。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 只在用户明确执行“保存”或“插入/删除段落”后才 push 新状态,避免高频操作撑爆内存
- 限制历史长度(如最多 20 步),超出时
list.remove(0) - 撤销时更新当前内容变量,并移动游标索引;重做需额外维护一个“重做栈”或反向遍历
- 注意:纯文本撤销不处理光标位置,这是进阶需求,需配合
StringBuilder和偏移量管理
打包成 jar 后双击无响应,命令行运行却正常?
本质是 jar 缺少控制台窗口。Windows 双击 jar 默认用 javaw 启动,不分配 stdout/stderr,所有 System.out.println() 都消失,错误也静默。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 调试阶段一律用命令行:
java -jar notepad.jar - 发布版若需双击运行,改用
java.exe启动(需写 bat/sh 脚本包装) - 关键日志不要只依赖
System.out,加简单文件日志(如追加写入log.txt) - 检查
Main-Class和Class-Path是否在META-INF/MANIFEST.MF中正确声明










