Sublime Text 运行 Java 依赖系统 JDK 和手动配置:需正确设置 javac 路径、working_dir、包目录结构及 UTF-8 编码,否则出现“找不到类”“命令未找到”“乱码”等问题。

Sublime Text 本身不支持 Java 编译运行,所有功能都依赖系统已安装的 JDK 和你手动写的构建配置;没配对 javac 路径、working_dir 错了、或源码目录结构和 package 声明不一致,都会导致“找不到类”“命令未找到”“乱码”这类问题——不是 Sublime 有问题,而是它压根不帮你做环境适配。
javac 命令找不到?先确认终端能跑通再动 Sublime
Sublime 启动时继承的是系统默认环境变量,不是你终端里改过的 .zshrc 或 Windows 的用户变量。所以即使你在 Terminal 里能执行 javac -version,Sublime 可能还是报 sh: javac: command not found。
- macOS:用终端执行
open -a "Sublime Text"启动,或装好subl命令后直接敲subl .,才能继承当前 shell 环境 - Windows:检查系统环境变量中
Path是否包含%JAVA_HOME%\bin,且JAVA_HOME指向的是 JDK 根目录(如C:\Program Files\Java\jdk-17.0.2),不是 JRE - Linux:运行
which javac,若无输出,先装 OpenJDK,例如sudo apt install openjdk-17-jdk - 重启 Sublime Text 进程(不只是关文件),否则新 PATH 不生效
Build System 怎么写才不会“编译成功但运行失败”
默认的 JavaC.sublime-build 只编译不运行,而且不处理包路径。你按 Ctrl+B 后看到 [Finished],其实只是调用了 javac,java 根本没跑。
- 最简可用配置(适用于无
package声明的单文件):{ "shell_cmd": "javac -encoding UTF-8 \"$file\" && java \"$file_base_name\"", "file_regex": "^.*?:([0-9]*):?([0-9]*)", "working_dir": "$file_path", "selector": "source.java" } -
"working_dir": "$file_path"必须写,否则java找不到.class文件 - 有
package com.example;?那Hello.java必须放在com/example/子目录下,且working_dir应设为com的上一级(即包名起点) - 别用
$file拼java命令——java要的是类全名,比如com.example.Hello,不是路径
中文乱码、控制台输出问号?编码参数漏了就白配
Windows 下尤其明显:源码是 UTF-8,javac 默认用 GBK 解析,编译出来的字节码里中文就是错的,运行时自然显示 ???。
立即学习“Java免费学习笔记(深入)”;
- 确保 Sublime 右下角显示的是
UTF-8,不是UTF-8 with BOM或Western (Windows 1252) - 在
shell_cmd中显式加-encoding UTF-8(编译)和-Dfile.encoding=UTF-8(运行):"shell_cmd": "javac -encoding UTF-8 \"$file\" && java -Dfile.encoding=UTF-8 \"$file_base_name\""
- macOS/Linux 用户如果用 Zsh,还可能需要在构建命令前加
export LANG=en_US.UTF-8;防止 locale 影响
为什么 package 声明总报错“class is public, should be declared in a file named…”
这不是构建系统的问题,是 Java 语言规则强制要求的——Sublime 不会帮你校验,但 javac 会立刻拒绝。
-
public class Hello必须保存为Hello.java,文件名大小写也必须完全一致 - 如果写了
package com.example;,文件就必须放在com/example/Hello.java,不能是src/com/example/Hello.java(除非你手动改-d输出路径并调整working_dir) - 构建命令里加
-d .是为了生成符合包结构的.class目录树,但前提是源文件位置已经合规 - 初学者建议先别写
package,等熟悉了再进阶;一上来就建多层目录+包声明,90% 的错误都出在这儿
真正卡住人的从来不是怎么写 JSON 配置,而是 javac 和 java 在哪个目录下找什么、按什么规则解析路径和类名——Sublime 只负责把命令扔给系统,剩下的全是 JDK 自己的事。


















