必须先确保终端中javac -version和java -version均能正常输出版本号,sublime才能调用成功;否则所有构建配置均无效。sublime不自带java编译器,仅调用系统已安装的jdk命令,需正确配置java_home和path,并彻底重启sublime以加载新环境变量。

javac 和 java 命令在终端能正常运行,Sublime 才可能调用成功;否则所有构建配置都是空谈。
先确认系统级 JDK 是否真就绪
Sublime 不自己带 Java 编译器,它只调用你系统里已装好的 javac 和 java。别跳过这步直接改配置文件。
- 打开终端(macOS/Linux)或命令提示符/PowerShell(Windows),执行:
javac -version和java -version - 必须都输出版本号(如
javac 17.0.1),才算真正可用 - 如果
java -version成功但javac -version报错,说明你只装了 JRE,不是 JDK —— 得重装完整 JDK(推荐 Eclipse Temurin 或 Oracle JDK) - Windows 用户特别注意:环境变量
JAVA_HOME必须指向 JDK 根目录(如C:\Program Files\Java\jdk-17.0.1),且%JAVA_HOME%\bin必须在Path里 - macOS/Linux 用户检查
$PATH是否包含$JAVA_HOME/bin,常用命令:echo $PATH | grep java - 改完环境变量后,**必须彻底退出 Sublime(不是关窗口,是杀进程)再重开**,否则它不会读新变量
构建系统怎么写才不报 “cannot find symbol”
默认的 JavaC.sublime-build 只编译单文件,遇到 package 或引用其他类就崩。核心是让 javac 知道类路径和输出结构。
- 用
-d .参数,而不是只写$file:例如["javac", "-encoding", "UTF-8", "-d", ".", "$file"] -
-d .的作用是按package com.example;自动创建./com/example/目录并把.class放进去 - 不加
-d .就算源码有package,javac也会把.class扔进当前目录,后续java根本找不到类 - 中文源码必须加
-encoding UTF-8,否则javac默认用系统编码(Windows 是 GBK)读文件,会报“非法字符” -
working_dir设为"$file_path",不能是固定路径,否则import其他类或读取同目录资源会失败
运行时为什么总报 “Could not find or load main class”
这不是代码错,是 java 命令没找对类名或工作目录不对。关键点:类名 ≠ 文件名,且路径必须匹配 package 结构。
- 如果类没声明
package,可直接用java $file_base_name(如HelloWorld.java→java HelloWorld) - 一旦写了
package com.example;,文件就必须放在com/example/HelloWorld.java,且运行时工作目录得是com的上一级(即包含com/的那个目录) - 别用
java "$file"或java "$file_name"——java不接受路径,只认全限定类名(如com.example.HelloWorld) - 推荐统一用
"java -cp . $file_base_name"配合-d .编译,前提是目录结构已严格匹配package - Windows 下
shell_cmd推荐用cmd /c "javac ... && java ..."封装,避免&&解析失败
中文乱码问题怎么一劳永逸
乱码本质是三处编码不一致:源文件保存编码、javac 读取编码、java 输出解码编码。Sublime 控制台默认不处理 UTF-8 BOM 或换行兼容性。
- Sublime 右下角确认文件编码是
UTF-8(不是UTF-8 with BOM,BOM 会导致javac报错) - 构建系统中
javac必须加-encoding UTF-8,否则 Windows 下默认按 GBK 解码源码 - 不要依赖
chcp 65001或改 CMD 属性——Sublime 构建控制台不继承这些设置 - 避免在
System.out.println里混用中文字符串和英文标点,某些旧 JVM 在无-Dfile.encoding=UTF-8时仍会截断 - 最稳做法:源码存为 UTF-8(无 BOM)、
javac -encoding UTF-8、不额外设 JVM 参数,靠-d .+ 正确目录结构跑通即可
-d . 和 working_dir 的配合最容易被忽略:前者决定 .class 输出位置,后者决定 java 查找类的起点。两者不一致,哪怕代码完全正确,也会卡在“找不到类”。Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











