Sublime Text 3 运行 Java 必须依赖系统已安装且可调用的 javac 和 java 命令,需在终端验证 javac -version 正常输出且版本一致;macOS/Linux 用 which javac,Windows 用 where javac;环境变量修改后须彻底重启 Sublime;推荐在 Packages/User/ 下手动创建 Java.sublime-build 文件,显式指定 -encoding UTF-8 和 -d . 参数以支持中文与 package 结构,并通过 Ctrl+Shift+B → Run 执行运行变体。

Sublime Text 3 本身不带 Java 编译器,所有编译运行都依赖你系统里已装好的 javac 和 java 命令能否被正确调用——如果终端里 javac -version 都报错,Sublime 绝对跑不通。
确认 javac 和 java 在终端能正常执行
这是硬门槛,跳过就白忙。不是“差不多行”,而是必须输出一致的版本号(比如都是 JDK 17)。
- macOS/Linux:打开终端,运行
which javac和javac -version,两个命令都要有输出,且版本号匹配 - Windows:打开 CMD,运行
where javac和javac -version;没输出说明%JAVA_HOME%in没进系统Path,光设JAVA_HOME不够 - 改完环境变量后,必须彻底退出 Sublime(任务管理器杀进程 / 右键菜单选“退出”),再重开——否则它不会加载新
PATH - macOS 图形界面启动的 Sublime 常不继承 shell 环境,推荐用终端执行
open -a "Sublime Text"或装好subl后用它启动
手动创建 Java.sublime-build 文件(推荐)
别去动 Java.sublime-package 里的压缩包文件,那容易被更新覆盖,也难调试。直接在 Packages/User/ 下新建文件更可靠。
- 打开 Sublime → Preferences → Browse Packages → 进入
User文件夹 - 新建文件,命名为
Java.sublime-build - 填入以下内容(适配中文、支持 package、不依赖外部脚本):
{
"cmd": ["javac", "-encoding", "UTF-8", "-d", ".", "$file"],
"file_regex": "^.*?([A-Za-z0-9_$.]+)\.java:([0-9]+):?([0-9]+):?\s*(.*)$",
"selector": "source.java",
"encoding": "UTF-8",
"variants": [
{
"name": "Run",
"shell": true,
"cmd": ["java", "${file_base_name}"],
"working_dir": "${file_path}",
"encoding": "UTF-8"
}
]
}
-
-d .确保 class 文件生成在当前目录,配合 package 声明时能正确解析路径(如package com.example;要求源文件在com/example/子目录下) -
variants中的Run允许按Ctrl+Shift+B直接运行,无需额外批处理 - 不要写
shell_cmd+runJava.bat这类方案:它在需要System.in输入时会卡死,且跨平台维护成本高
中文乱码和 package 相关问题怎么解
乱码不是编码设置错了,而是 JVM 默认字符集和终端不一致;package 报错往往不是配置问题,而是目录结构没对齐。
立即学习“Java免费学习笔记(深入)”;
- 中文输出为空或方块?确保:
- 源文件保存为 UTF-8(Sublime 默认就是)
-
javac加了-encoding UTF-8(上面 build 文件已含) - 运行时终端本身支持 UTF-8(Windows CMD 默认不支持,建议用 PowerShell 或 Windows Terminal)
- 报错
Could not find or load main class XXX?- 检查类名是否与文件名完全一致(大小写敏感)
- 如果有
package com.foo;,文件必须放在com/foo/XXX.java路径下,且你在com的父目录执行Ctrl+Shift+B → Run - 不要在
src目录里放 package,而要让src成为项目根,src/com/foo/XXX.java
为什么 Ctrl+B 没输出,只显示 “Finished in X.Xs”
这是最常被忽略的点:Ctrl+B 默认只执行 cmd,也就是编译;它不会自动运行,也不会捕获 java 的 stdout。输出空白是正常现象。
-
Ctrl+B= 编译(生成.class) -
Ctrl+Shift+B→ 选Run= 运行(执行java并显示结果) - 想一键编译+运行?得自己加一个 variant,但要注意:JVM 启动后 stdin 是关闭的,交互式程序(如用
Scanner)仍会失败 - 真正需要输入的场景,不如直接终端里
javac XXX.java && java XXX更可控
复杂点不在配置本身,而在 JDK 路径、终端编码、package 目录结构三者是否咬合。任何一个环节断开,都会表现为“没输出”或“类找不到”,但错误信息往往藏在控制台最上面一行,容易被忽略。


















