Sublime Text 本身不带 Java 编译器或运行时,所有编译运行均依赖系统已安装的 javac 和 java 命令;必须先在终端成功执行 javac -version 和 java -version,否则 Sublime 构建必失败。

Sublime Text 本身不带 Java 编译器或运行时,所谓“能运行 Java”,本质是它调用你系统里已装好的 javac 和 java 命令——如果终端里都跑不通,Sublime 绝对跑不通。
javac -version 在终端报错,Sublime 就不可能编译成功
这是最常被跳过的前置条件。Sublime 启动时继承的是系统默认环境变量,不是你终端里改过的 .zshrc 或 Path。它根本看不到你手动加的 $JAVA_HOME/bin。
- macOS/Linux:在终端执行
which javac和javac -version,必须有输出且版本号一致;没有?先检查~/.zshrc是否导出JAVA_HOME并把$JAVA_HOME/bin加进PATH - Windows:打开“系统属性→高级→环境变量”,确认
Path里有%JAVA_HOME%\bin,且JAVA_HOME指向 JDK 根目录(比如C:\Program Files\Java\jdk-17.0.2),不是 JRE - 改完环境变量后,必须彻底退出 Sublime(右键菜单“退出”,不是关窗口),再重新打开——否则它不会加载新变量
按 Ctrl+B 没反应或一闪而过,大概率是构建系统没选对
Sublime 不会自动识别 .java 文件就切到 Java 构建系统。它只认你手动选的或文件后缀关联的构建定义。
- 确保文件已保存,后缀是
.java(不是.txt,也不是无后缀) - 菜单栏 →
Tools→Build System→ 手动选JavaC(如果装了 JavaC 插件)或你自定义的Java构建系统 - JavaC 插件默认只编译当前文件,不处理
package或依赖;一旦类里写了package com.example;,但文件没放在com/example/Hello.java路径下,就会报error: class Hello is public, should be declared in a file named Hello.java
“Error: Could not find or load main class” 是 working_dir 或类名拼错
这个错误和代码无关,纯属构建配置没对上路径和类名规则。java 命令不认文件路径,只认类全名,且工作目录必须是包结构的根。
立即学习“Java免费学习笔记(深入)”;
- 如果类没写
package,构建里用"java $file_base_name"是安全的,但"working_dir"必须设为"$file_path",否则java找不到.class - 如果用了
package com.example;,那源文件必须放在com/example/MyApp.java,构建系统的"working_dir"得设成该文件的父目录(即com的上一级),然后shell_cmd中运行java com.example.MyApp,不能用$file_base_name - 别在
shell_cmd里硬编码路径,例如"javac /home/user/MyApp.java"—— 用$file和$file_base_name动态代入才可靠
UTF-8 编码不显式声明,中文注释或字符串会乱码
Java 源文件含中文时,javac 默认用系统编码(Windows 是 GBK),编译后运行会抛 IllegalCharsetNameException 或显示方块字。
- 所有构建系统 JSON 里必须加
"encoding": "utf-8" -
shell_cmd中的javac命令要加-encoding UTF-8参数,例如:"javac -encoding UTF-8 \"$file\" && java \"$file_base_name\"" - Sublime 自身编码也要设为 UTF-8:右下角点击编码名 → 选
UTF-8;或菜单File→Save with Encoding→UTF-8
真正卡住的从来不是插件怎么装,而是 javac 命令能不能从 Sublime 的子进程里直接调通、working_dir 是不是指向了包结构起点、以及 java 后面跟的到底是文件名还是类全名——这三个点错一个,就只能看到报错信息在闪。


















