Notepad++本身不能编译或运行Java,必须先确保CMD中javac -version和java -version均能输出版本号,再配置JAVA_HOME与PATH,NppExec脚本需含-encoding UTF-8、-cp "$(CURRENT_DIRECTORY)"和-Dfile.encoding=UTF-8参数,并将文件编码设为UTF-8 without BOM。

Notepad++ 本身不能编译或运行 Java,它只是个文本编辑器;所谓“配置环境”,本质是让系统能识别 javac 和 java 命令,并通过 Notepad++ 调用它们——这一步失败,后面全白搭。
确认 javac 和 java 能在 CMD 中直接运行
90% 的问题卡在这步。Notepad++ 不报错,只静默失败或弹出 'javac' is not recognized。
- 打开 CMD(不是 PowerShell),执行:
javac -version和java -version - 必须都输出版本号(如
17.0.1),才算真正可用 - 如果失败:检查系统环境变量
PATH是否包含%JAVA_HOME%\bin,且JAVA_HOME指向 JDK 根目录(如C:\Program Files\Java\jdk-17.0.1) - 含空格路径(如
Program Files)必须用双引号包裹命令,但环境变量里不用加引号——引号只用于命令行调用时 - 重启 Notepad++(甚至资源管理器),否则新 PATH 不生效
NppExec 脚本里必须加的三个参数
光写 javac HelloWorld.java && java HelloWorld 很容易编译成功但运行报错,尤其含中文或 Swing 时。
-
-encoding UTF-8:强制编译器按 UTF-8 解析源码,否则中文字符串或注释会变成\uFFFD报错 -
-cp "$(CURRENT_DIRECTORY)":显式指定类路径为当前目录,避免NoClassDefFoundError -
-Dfile.encoding=UTF-8:让 JVM 启动时用 UTF-8 读取 class 和控制台 I/O,否则System.out.println("你好")显示方块
完整脚本示例(粘贴到 NppExec → Execute…):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
NPP_SAVE cd "$(CURRENT_DIRECTORY)" javac -encoding UTF-8 "$(FULL_CURRENT_PATH)" if $(EXITCODE) == 0 java -cp "$(CURRENT_DIRECTORY)" -Dfile.encoding=UTF-8 "$(NAME_PART)"
为什么 “运行 → 运行…” 里的命令经常失效
这个菜单不走 NppExec,也不自动保存、不处理编码、不设 classpath,适合极简验证,但容错性差。
- 命令必须写成一行:
cmd /c "cd /d "$(CURRENT_DIRECTORY)" && javac "$(FILE_NAME)" && java "$(NAME_PART)" -
$(NAME_PART)必须和public class名完全一致,且仅适用于默认包(无package声明) - 路径含空格时,
cd /d才能正确切换目录;用cmd /k会卡住,/c才执行完就退出 - 没保存文件就运行?
$(FILE_NAME)为空,命令直接崩,不会提示
Swing 程序黑屏、没窗口、资源加载失败
这不是 Notepad++ 或 NppExec 的问题,是 Swing 自身限制没被满足。
- GUI 必须在事件调度线程启动:
SwingUtilities.invokeLater(...)包裹主窗口创建逻辑,否则可能卡死或黑屏 -
$(CURRENT_DIRECTORY)是 .java 文件所在目录,不是你双击打开 Notepad++ 时的默认路径——图片、配置等资源必须放在这里 - 不要用
java -jar app.jar方式运行;NppExec 脚本只适合单文件快速验证,复杂项目请用构建工具 - Notepad++ 默认编码是 ANSI,含中文必须手动设为
UTF-8 without BOM(编码 → 转为 UTF-8 without BOM)
最常被忽略的一点:所有路径变量($(CURRENT_DIRECTORY)、$(FULL_CURRENT_PATH))都是 Notepad++ 在当前打开文件基础上解析出来的,不是你心里想的那个“项目根目录”。文件没保存、路径含中文、类名和文件名不一致——任何一个都会让整个流程中断,而且错误信息还特别安静。

















