0

0

Java初学者项目实战:构建个人记事本应用

P粉602998670

P粉602998670

发布时间:2026-01-13 11:39:08

|

210人浏览过

|

来源于php中文网

原创

Java初学者用Swing写记事本需规避三类高频崩溃点:一是必须用SwingUtilities.invokeLater启动GUI线程,否则抛IllegalStateException;二是JTextArea需setLineWrap(true)并嵌入JScrollPane;三是文件读写须显式指定UTF-8编码并考虑BOM兼容性。

java初学者项目实战:构建个人记事本应用

Java初学者用 Swing 写记事本,核心不是“做完整功能”,而是避开 SwingUtilities.invokeLater 忘写、JTextArea 未设换行、文件编码乱码这三类高频崩溃点。

为什么新建窗口总卡死或报 java.lang.IllegalStateException: Applets not supported

这不是浏览器问题——这是在 IDE(如 IntelliJ)里直接运行 Applet 类或误选了错误的主类。Swing 窗口必须从 JFrame 派生,并且启动逻辑必须包裹在 SwingUtilities.invokeLater 中,否则 GUI 线程未初始化就操作组件,JVM 会拒绝执行。

  • 确保入口类是普通 public class Notepad,不含 extends Applet
  • 主方法必须长这样:
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new Notepad().setVisible(true);
        });
    }
  • 别在 main 里直接 new JFrame 并调用 setVisible(true),这是初学者最常跳的坑

JTextArea 输入文字不换行、滚动条不出现?

默认 JTextArea 是单行模式,且 JScrollPane 不会自动监听内容变化。你得手动关掉行截断、启用换行、再把文本区塞进带滚动条的容器。

  • 调用 textArea.setLineWrap(true)textArea.setWrapStyleWord(true)(后者让断行按词切,不劈开单词)
  • 必须用 new JScrollPane(textArea) 构造滚动容器,不能只加 textAreaJFrame
  • 别漏掉 frame.add(scrollPane, BorderLayout.CENTER) —— 如果用 BorderLayout 却往 NORTH 加,内容区会塌缩成一条线

保存中文到文件后全是 ??? 或打开乱码?

Java FileWriter 默认用平台编码(Windows 是 GBK,Mac/Linux 是 UTF-8),而记事本(Notepad.exe)默认只认 UTF-8 带 BOM 或 ANSI。两者不匹配,必然乱码。

绘蛙-多图成片
绘蛙-多图成片

绘蛙新推出的AI图生视频工具

下载

立即学习Java免费学习笔记(深入)”;

  • 统一用 OutputStreamWriter + FileOutputStream,显式指定 "UTF-8" 编码
  • 写入前加 BOM 可提升 Windows 兼容性:
    out.write("\uFEFF"); // 写入 UTF-8 BOM
  • 读取时也必须用 InputStreamReader 指定 "UTF-8",别用 FileReader(它不接受编码参数)

菜单栏点击没反应?ActionListener 绑错了对象

常见写法是给 JMenuItem 添加监听器,但忘了它本身不触发事件——除非你调用了 item.addActionListener(...)。更隐蔽的问题是:监听器里调用 System.exit(0) 会杀掉整个 JVM,而不是仅关闭窗口。

  • 关闭窗口请用 frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE),再在菜单响应中调用 frame.dispose()
  • 保存逻辑里别用 FileWriter 而不用 try-with-resources,文件句柄泄漏会导致第二次保存失败
  • 如果用 JFileChooser,记得调 chooser.setFileFilter 过滤 .txt,否则用户可能选中图片导致 IOException

真正卡住初学者的,从来不是“怎么实现另存为”,而是 FileOutputStream 打开后没关、SwingUtilities.invokeLater 漏写、以及 Windows 下 UTF-8 不带 BOM 导致的“明明写了中文却显示问号”——这些点不提前踩一遍,项目就停在第一版无法迭代。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

831

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

737

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

733

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16925

2023.08.03

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号