javac 不被识别为内部或外部命令、可操作程序或批处理文件 [已关闭]TL;DR环境变量和PATH JDK vs. JRE不要使用set 查找 Java 路径打开设置对话框干净PATH 搭PATH 设置JAVA_HOME 关闭并重新打开命令提示符另请参见

我在尝试编译 Java 程序时遇到错误。

我使用的是Windows(这是一个特定于Windows的问题),并且安装了最新的JDK。

我尝试了涉及变量的解决方案,但错误仍然存在。PATH

控制台输出:

C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.java
'javac' is not recognized as an internal or external command,
operable program or batch file.

答案 1

TL;DR

对于有经验的读者:

  1. 找到 Java 路径;它看起来像这样:C:\Program Files\Java\jdkxxxx\bin\
  2. 在“开始”菜单中搜索“环境变量”以打开选项对话框。
  3. 检查。删除旧的 Java 路径。PATH
  4. 将新的 Java 路径添加到 。PATH
  5. 编辑。JAVA_HOME
  6. 关闭并重新打开控制台/IDE。

欢迎!

您遇到了Java初学者面临的最臭名昭着的技术问题之一:错误消息。'xyz' is not recognized as an internal or external command...

简而言之,您没有正确安装Java。在 Windows 上完成 Java 的安装需要一些手动步骤。在安装 Java 之后(包括升级 JDK 之后),必须始终执行这些步骤。

环境变量和PATH

(如果您已经了解这一点,请随时跳过接下来的三个部分。

运行时,cmd 必须确定位置。这是通过环境变量 来完成的。javac HelloWorld.javajavac.exePATH

环境变量是一个特殊的键值对(例如 )。大多数都带有操作系统,有些是正常系统运行所必需的。当每个程序启动时,它们的列表将传递给每个程序(包括cmd)。在 Windows 上,有两种类型用户环境变量系统环境变量windir=C:\WINDOWS

您可以看到您的环境变量,如下所示:

C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\craig\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
...

最重要的变量是 PATH。它是一个路径列表,由 分隔。在 cmd 中输入命令时,将扫描列表中的每个目录以查找匹配的可执行文件。;

在我的计算机上,是:PATH

C:\>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower
Shell\v1.0\;C:\ProgramData\Microsoft\Windows\Start Menu\Programs;C:\Users\craig\AppData\
Roaming\Microsoft\Windows\Start Menu\Programs;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\
msys64\mingw32\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\
craig\AppData\Local\Yarn\bin;C:\Program Files\Java\jdk-10.0.2\bin;C:\ProgramFiles\Git\cmd;
C:\Program Files\Oracle\VirtualBox;C:\Program Files\7-Zip\;C:\Program Files\PuTTY\;C:\
Program Files\launch4j;C:\Program Files (x86)\NSIS\Bin;C:\Program Files (x86)\Common Files
\Adobe\AGL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\iCLS Client\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\iCLS
Client\;C:\Users\craig\AppData\Local\Microsoft\WindowsApps

当您运行 cmd 时,在意识到这不是内部命令后,将搜索系统 PATH,后跟用户 PATH。它机械地进入列表中的每个目录,并检查是否存在 javac.comjavac.exe javac.bat。当它找到时,它会运行它。当它不这样做时,它会打印javac HelloWorld.javajavacjavac'javac' is not recognized as an internal or external command, operable program or batch file.

必须将 Java 可执行文件目录添加到 。PATH

JDK vs. JRE

(如果您已经了解这一点,请随时跳过本节。

下载 Java 时,您可以选择:

  • Java 运行时环境 (JRE),它包括运行 Java 程序的必要工具,但不包括编译新程序 – 它包含但不包含 .javajavac
  • Java 开发工具包 (JDK),它包含 和 ,以及许多其他开发工具。JDK 是 JRE 的超集。javajavac

您必须确保已安装 JDK。如果只安装了 JRE,则无法执行,因为硬盘驱动器上没有安装 Java 编译器。检查您的Windows程序列表,并确保Java包的名称中包含“开发工具包”一词。javac

不要使用set

(如果您不打算这样做,请随时跳过本节。

其他几个答案建议执行以下各项的一些变体:

C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin

不要那样做。该命令存在几个主要问题:

  1. 此命令从 Java 路径中擦除其他所有内容并将其替换为 Java 路径。执行此命令后,您可能会发现其他各种命令不起作用。PATH
  2. 你的Java路径可能不是 - 你几乎肯定有一个较新版本的JDK,它会有不同的路径。C:\Program Files\Java\jdk1.7.0_09\bin
  3. 新的仅适用于当前 cmd 会话。每次打开命令提示符时,您都必须重新输入该命令。PATHset

第1点和第2点可以用这个稍微好一点的版本来解决:

C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%

但总的来说,这只是一个坏主意。

查找 Java 路径

正确的方法从找到您安装Java的位置开始。这取决于您安装 Java 的方式。

Exe 安装程序

您已通过运行安装程序安装了 Java。Oracle 的安装程序将 Java 版本放在 (or) 下。使用文件资源管理器或命令提示符,导航到该目录。C:\Program Files\Java\C:\Program Files (x86)\Java\

每个子文件夹代表一个 Java 版本。如果只有一个,你已经找到了它。否则,请选择看起来像较新版本的版本。确保文件夹名称以 开头(而不是 )。输入目录。jdkjre

然后输入该目录。bin

您现在位于正确的目录中。复制路径。如果在文件资源管理器中,请单击地址栏。如果在命令提示符下,请复制提示符。

生成的 Java 路径应采用以下形式(不带引号):

C:\Program Files\Java\jdkxxxx\bin\

压缩文件

您已经下载了包含 JDK 的.zip。将其提取到某个随机的地方,在那里它不会妨碍您; 是一个可以接受的选择。C:\Java\

然后在其中的某个位置找到该文件夹。bin

您现在位于正确的目录中。复制其路径。这是 Java 路径。

请记住永远不要移动文件夹,因为这会使路径无效。

打开设置对话框

这是要编辑的对话框。有多种方法可以访问该对话框,具体取决于您的Windows版本,UI设置以及系统配置的混乱程度。PATH

请尝试以下一些:

  • 开始菜单/任务栏搜索框 » 搜索“环境变量”
  • 赢 + R »control sysdm.cpl,,3
  • 赢 + R » » 环境变量SystemPropertiesAdvanced.exe
  • 文件浏览器 » 输入地址栏 » 高级系统设置(最左侧,侧边栏中) » 环境变量Control Panel\System and Security\System
  • 桌面 » 右键单击此电脑 » 属性 » 高级系统设置 » 环境变量
  • 开始菜单 » 右键单击计算机 » 属性 » 高级系统设置 » 环境变量
  • 控制面板(图标模式) » 系统 » 高级系统设置 » 环境变量
  • 控制面板(类别模式) » 系统和安全 » 系统 » 高级系统设置 » 环境变量
  • 桌面 » 右键单击我的电脑 » 高级 » 环境变量
  • 控制面板 » 系统 » 高级 » 环境变量

其中任何一个都应该带您进入正确的设置对话框。

如果您使用的是Windows 10,则Microsoft为您提供了一个花哨的新UI来编辑 。否则,您将在其完整的分号镶嵌的荣耀中看到,挤入单行文本框中。尽最大努力在不破坏系统的情况下进行必要的编辑。PATHPATH

干净PATH

看。您几乎肯定有两个变量(因为用户与系统环境变量)。您需要查看它们。PATHPATH

检查其他 Java 路径并将其删除。它们的存在会引起各种冲突。(例如,如果您按该顺序将 JRE 8 和 JDK 11 放在 中,则将调用 Java 11 编译器,该编译器将创建版本 55 文件,但将调用 Java 8 JVM,该 JVM 仅支持版本 52,并且您将遇到不受支持的版本错误,并且无法编译和运行任何程序。通过确保 中只有一个 Java 路径来避免这些问题。当你使用它时,你也可以卸载旧的Java版本。请记住,您不需要同时拥有JDK和JRE。PATHjavac.classjavaPATH

如果有 ,也请将其删除。Oracle旨在通过创建始终指向最新Java安装的符号链接来解决升级后Java路径中断的问题。不幸的是,它通常最终指向错误的位置或根本无法正常工作。最好删除此条目并手动管理 Java 路径。C:\ProgramData\Oracle\Java\javapath

现在也是进行一般内务管理的好机会。如果您的PC上不再安装与软件相关的路径,则可以将其删除。您还可以随机排列路径的顺序(如果您关心这样的事情)。PATH

PATH

现在,采用您三步前找到的Java路径,并将其放入系统 。PATH

您的新路径在列表中的哪个位置并不重要;把它放在最后是一个不错的选择。

如果您使用的是 Windows 10 之前的 UI,请确保已正确放置分号。列表中的每个路径之间应该只有一个。

这里真的没什么可说的。只需将路径添加到,然后单击“确定”。PATH

设置JAVA_HOME

当你在它的时候,你也可以设置。这是另一个环境变量,也应包含 Java 路径。许多Java和非Java程序,包括流行的Java构建系统MavenGradle,如果设置不正确,就会抛出错误。JAVA_HOME

如果 不存在,请将其创建为新的系统环境变量。将其设置为不带目录的 Java 目录的路径,即 .JAVA_HOMEbin/C:\Program Files\Java\jdkxxxx\

请记住在升级Java后也要进行编辑。JAVA_HOME

关闭并重新打开命令提示符

尽管您已经修改了,但所有正在运行的程序(包括cmd)都只能看到旧的.这是因为所有环境变量的列表仅在程序开始执行时才复制到程序中;此后,它仅查阅缓存的副本。PATHPATH

没有刷新cmd的环境变量的好方法,因此只需关闭命令提示符并再次打开它即可。如果您使用的是 IDE,请关闭并重新打开它。

另请参见


答案 2

试试这个..我也有它,但现在它在XP中解决了。

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java

推荐