根本原因是系统未将javac加入PATH,Sublime继承默认环境变量而非终端配置;需确认JDK安装、正确配置JAVA_HOME和PATH,设置匹配的Build System,并统一源码、编译、运行三阶段编码。

Java编译命令报错“javac: command not found”
根本原因是系统没把javac加进PATH,Sublime Text启动时继承的是系统默认环境变量,不是你终端里配置好的那个。
- 先在终端运行
which javac或javac -version确认JDK已装好且可用 - Mac/Linux下检查
~/.zshrc或~/.bash_profile是否导出了JAVA_HOME并把$JAVA_HOME/bin加进了PATH - Windows用户得去“系统属性→高级→环境变量”,确认
Path里有%JAVA_HOME%\bin,且JAVA_HOME指向JDK根目录(不是JRE) - Sublime Text不读shell配置文件——macOS上可尝试用
subl命令从终端启动,它会继承当前shell环境;Windows/Linux建议直接改Sublime的Tools → Build System → New Build System…
写完.java文件按Ctrl+B没反应或只闪一下
这是Build System没配对,或者保存时后缀不是.java,Sublime不会自动切换到Java构建。
- 确保文件已保存,扩展名是
.java(不是.txt或无后缀) - 手动选构建系统:
Tools → Build System → JavaC(自带)或你自定义的 - 如果用的是自带
JavaC.sublime-build,它默认只编译当前文件,不处理依赖——遇到package声明或引用其他类时会报cannot find symbol - 想支持包结构,得改
cmd参数,比如用["javac", "-d", ".", "$file"]代替默认的["javac", "$file"],让class文件输出到当前目录树
运行.class文件提示“Error: Could not find or load main class”
不是代码问题,是java命令找不到类或类路径不对。Sublime默认构建只编译,不运行。
- 自带JavaC构建系统不带运行功能,必须另建一个
JavaRun.sublime-build - 关键点:运行时
java命令需要的是类名(不含.class),且当前工作目录得是class文件所在根目录(即package语句对应的目录层级起点) - 简单场景下,如果类没声明
package,可以用["java", "$file_base_name"];但一旦有package com.example;,就得cd进com/example/上层,再执行java com.example.Main - 别用
$file直接拼接——$file是绝对路径,java不认路径,只认类全名
中文输出乱码(控制台显示)
Windows最常见,本质是cmd终端编码和Java源文件编码、JVM默认编码三者不一致。
立即学习“Java免费学习笔记(深入)”;
- Sublime里先确认文件编码:右下角看是不是
UTF-8,不是就File → Reopen with Encoding → UTF-8 - 构建系统里给
javac加-encoding UTF-8参数,否则它按系统默认(Windows是GBK)解码源文件 - 运行时加
-Dfile.encoding=UTF-8,强制JVM用UTF-8读取class里的字符串常量 - Windows cmd本身不原生支持UTF-8,临时方案是构建命令开头加
chcp 65001 >nul &&,但更稳的做法是换用Windows Terminal或ConEmu
javac压根不在PATH里,或者java命令输的是文件名而不是类名。
















