notepad++报‘javac’未识别是系统path未配置jdk bin路径所致,需在环境变量中设置java_home并添加%java_home%\bin到系统path,cmd中验证javac -version成功后,nppexec脚本应使用带双引号的绝对路径调用javac.exe和java.exe,并确保文件编码为utf-8 without bom。

Notepad++ 里点运行报 'javac' is not recognized,不是 Notepad++ 的问题,而是 Windows 根本没找到 javac.exe —— 所有修复动作都得在系统环境变量层面做,插件或脚本改再多也白搭。
确认 javac 真正在 CMD 中可用
别跳过这步。Notepad++ 不会告诉你 JDK 没装,它只会静默失败或弹出那句经典错误。'javac' is not recognized 出现时,90% 是因为 CMD 本身也找不到 javac。
- 打开 CMD(不是 PowerShell),输入:
javac -version和java -version,两行都必须输出类似17.0.1的版本号 - 如果报错,说明系统 PATH 没包含 JDK 的
bin目录;此时 NppExec 或“运行→运行…”全无效 - 检查
JAVA_HOME是否指向 JDK 根目录(如C:\Program Files\Java\jdk-17.0.1),且%JAVA_HOME%\bin已加入系统 PATH(不是用户 PATH) - 含空格路径(如
C:\Program Files\...)必须用双引号包裹命令调用,比如:"C:\Program Files\Java\jdk-17.0.1\bin\javac.exe"
NppExec 脚本里写死 JDK 路径反而更稳
依赖 javac 命令全局可用看似简洁,但一旦 PATH 变动、多 JDK 切换或用户权限受限,就容易断。直接写绝对路径 + 双引号,绕过 PATH 查找,实测容错更强。
- 在 NppExec → Execute → temporary script 中写:
NPP_SAVEcd "$(CURRENT_DIRECTORY)""C:\Program Files\Java\jdk-17.0.1\bin\javac.exe" -encoding UTF-8 "$(FULL_CURRENT_PATH)""C:\Program Files\Java\jdk-17.0.1\bin\java.exe" -cp "$(CURRENT_DIRECTORY)" -Dfile.encoding=UTF-8 "$(NAME_PART)"- 注意:路径中所有空格都要靠双引号包住,
$(NAME_PART)是类名(不含 .java),不能写成$(FILE_NAME)
Notepad++ 自身编码设置影响编译结果
即使 javac 能跑,含中文的源码仍可能报 illegal character: \uFFFD —— 这是文件编码和编译器编码不匹配导致的,跟 JDK 配置无关。
- 菜单栏 → 编码 → 选择 UTF-8 without BOM(不是 “UTF-8” 或 “ANSI”)
- 必须关掉 “以 UTF-8 记录” 选项(即不带 BOM),否则
javac会把 BOM 当作非法字符解析 - 配合脚本里的
-encoding UTF-8参数,才能确保中文字符串、注释正常编译 - Swing 程序若出现 GUI 黑屏或无响应,大概率是没加
SwingUtilities.invokeLater(...),和编码无关,但常被误判为环境问题
最易被忽略的是:改完环境变量后,必须重启 Notepad++(甚至资源管理器),否则新 PATH 不生效;而很多人只重启 CMD 就以为 OK 了。另外,$(CURRENT_DIRECTORY) 在 NppExec 中不自动处理空格和特殊字符,所以 -cp 后面加双引号并不保险,稳妥做法仍是用 -cp "." 或确保路径不含空格。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











