sublime text 运行 java 必须依赖系统已安装且终端可调用的 javac 和 java 命令,需验证版本一致、彻底重启 sublime、手动创建含 -d . 和 -encoding utf-8 的 java.sublime-build 文件。

Sublime Text 本身不安装 Java 环境,它只调用你系统里已装好的 javac 和 java 命令——如果终端里都跑不通,Sublime 绝对无法调试 Java。
确认 javac 和 java 在终端能直接执行
这是硬前提,跳过这步后面全白搭。Sublime 启动时继承的是操作系统级环境变量,不是你终端里临时改的 PATH,更不读 ~/.zshrc 或 Windows 用户变量。
- macOS/Linux:打开终端,运行
which javac和javac -version,两个命令都必须有输出,且版本号一致(比如都是 17.0.2) - Windows:打开 CMD,运行
where javac和javac -version;若无输出,说明%JAVA_HOME%\bin没进系统 Path(光设JAVA_HOME不够) - macOS 图形界面启动 Sublime 时,常不继承 shell 环境——改用终端执行
open -a "Sublime Text"或装好subl后用它启动 - 改完环境变量后,必须彻底退出 Sublime(任务管理器杀进程 / Activity Monitor 强制退出),再重开;否则新 PATH 不生效
手动创建 Java.sublime-build 支持包结构和中文编码
默认的构建系统不处理 package、不指定 UTF-8 编码、也不清理旧 .class 文件,极易编译失败或乱码。别动 Java.sublime-package 里的压缩包,直接在 Packages/User/ 下新建文件最可靠。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 菜单栏 →
Tools→Build System→New Build System… - 粘贴以下内容(Windows 路径用双反斜杠,
javac和java必须已在 PATH 中):
{
"shell_cmd": "javac -encoding UTF-8 -d . \"${file}\" && java -cp . \"${file_base_name}\"",
"file_regex": "^(...*?):([0-9]*):?([0-9]*):? (.*)$",
"working_dir": "${file_path}",
"selector": "source.java"
}
-
-d .是关键:让javac按package声明自动建目录(如com/example/Hello.class),否则java运行时找不到类 -
-cp .必须和-d .配合:告诉java从当前目录开始按包路径找类 - 中文源码必须加
-encoding UTF-8,否则编译报错或输出乱码
文件路径、类名、package 声明三者必须严格匹配
哪怕只差一个字母或层级,就会触发 error: class XXX is public, should be declared in a file named XXX.java 或 NoClassDefFoundError。
- 如果源码有
package com.example;,文件就必须放在com/example/Hello.java,不能是src/com/example/Hello.java或hello.java - 类声明为
public class Hello,文件名必须是Hello.java(大小写敏感) - 构建时
working_dir应设为${file_path},即文件所在目录的父级——这样才能让-d .输出到正确起点 - 如果只是练算法、写单文件小工具,干脆删掉
package声明,把文件直接放在项目根目录,构建系统也简化成javac -encoding UTF-8 \"${file}\" && java \"${file_base_name}\"
为什么按 Ctrl+B 显示 [Finished] 却没输出?
因为默认构建只调用 javac 编译,不运行 java。即使你看到“编译成功”,也可能根本没执行运行步骤。
- 检查构建系统里有没有
&& java …这部分;没有就只是编译,不会运行 - 如果用了
package却没加-d .,javac可能静默生成了平铺的.class,但java死活找不到主类 - 运行时报
Could not find or load main class,大概率是working_dir错了,或java命令后跟的类名没写全限定名(比如该写com.example.Hello却只写了Hello) - 调试时可先在终端手动执行一遍:
cd /path/to/your/file/dir && javac -d . HelloWorld.java && java -cp . HelloWorld,确认流程走通再回 Sublime
最容易被忽略的点是:Sublime 启动方式决定它能不能看见你的 JDK。图形界面点图标启动的 Sublime,常常比终端里 open -a 启动的少一整段 PATH。调试卡住时,第一反应不该是改构建文件,而是先在 Sublime 控制台(Ctrl+`)里输入 import os; print(os.environ.get('PATH')),搜一下 jdk 或 java 路径是否存在。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










