Javac不能被视为内部或外部命令、可操作程序或批处理文件

我正在尝试编译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.
1323175 次浏览

你输入错了set命令——你错过了C:后面的反斜杠。它应该是:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin

博士TL;

对于有经验的读者:

  1. 找到Java路径;它看起来像这样:C:\Program Files\Java\jdkxxxx\bin\
  2. 开始菜单搜索“环境变量”打开选项对话框。
  3. 检查PATH。删除旧的Java路径。
  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

(如果你已经理解了这一点,可以跳过接下来的三个部分。)

当你运行javac HelloWorld.java时,cmd必须确定javac.exe所在的位置。这是通过环境变量PATH来完成的。

< / em > < em >环境变量是一个特殊的键值对(例如windir=C:\WINDOWS)。大多数都是操作系统自带的,还有一些是系统正常运行所必需的。当每个程序(包括cmd)启动时,它们的列表被传递给它。在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

当你运行javac HelloWorld.java时,cmd在意识到javac不是内部命令时,会搜索javac0。它机械地输入列表中的每个目录,并检查是否存在javac1。当它找到javac时,就运行它。如果没有,则输出'javac' is not recognized as an internal or external command, operable program or batch file.

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

JDK与JRE

(如果你已经理解了这一点,可以跳过本节。)

当你下载Java时,你可以选择:

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

你必须确保已安装JDK。如果你只安装了JRE,你不能执行javac,因为你的硬盘上没有安装Java编译器。检查你的Windows程序列表,确保Java包的名称中包含“Development Kit”字样。

不要使用set

(如果你不打算这样做,可以跳过这一部分。)

其他一些答案建议执行一些变化:

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

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

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

第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版本放在C:\Program Files\Java\(或C:\Program Files (x86)\Java\)下。使用文件资源管理器或命令提示符导航到该目录。

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

然后进入它的bin目录。

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

结果的Java路径应该是(不带引号)的形式:

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

Zip文件

已下载包含JDK的。zip文件。把它随机抽取到一个不会妨碍你的地方;C:\Java\是一个可以接受的选择。

然后找到bin文件夹。

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

记住永远不要移动文件夹,因为那样会使路径失效。

打开设置对话框

< img src = " https://i.imgur.com/8RT5nyy.jpg " alt = " " >

这是编辑PATH的对话框。根据你的Windows版本、UI设置和系统配置的混乱程度,有很多方法可以进入这个对话框。

试试这些方法:

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

任何这些都应该带您到正确的设置对话框。

如果你使用的是Windows 10,微软已经为你提供了一个花哨的新UI来编辑PATH。否则,你会看到PATH在它完整的分号外壳的荣耀,压缩到一个单行文本框。尽最大努力在不破坏系统的情况下进行必要的编辑。

清洁PATH

看看PATH。你几乎肯定有两个PATH变量(因为用户和系统环境变量)。你需要看两个。

检查其他Java路径并删除它们。他们的存在会引起各种各样的冲突。(例如,如果你在PATH中有JRE 8和JDK 11,按照这个顺序,那么javac将调用Java 11编译器,它将创建版本55的.class文件,但java将调用Java 8 JVM,它只支持最高版本52,你将体验不支持的版本错误,不能编译和运行任何程序。)通过确保在PATH中只有一个Java路径来避免这些问题。当你在它,你不妨卸载旧Java版本,太。并且记住你不需要同时是JDK和JRE。

如果你有C:\ProgramData\Oracle\Java\javapath把这个也去掉。Oracle打算通过创建符号链接来解决升级后Java路径中断的问题,该符号链接总是指向最新的Java安装。不幸的是,它经常指向错误的位置或根本不起作用。最好删除此条目并手动管理Java路径。

现在也是在PATH上执行一般性清理工作的好机会。如果你的电脑上不再安装与软件相关的路径,你可以删除它们。您还可以打乱路径的顺序(如果您关心这样的事情)。

添加到PATH

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

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

如果您使用的是windows 10之前的用户界面,请确保您正确地放置了分号。列表中的每个路径都应该有一个分隔符。

这里真的没什么可说的了。只需将路径添加到PATH并单击OK。

设置JAVA_HOME

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

如果JAVA_HOME不存在,将其创建为一个新的系统环境变量。将其设置为Java目录的路径,不包含bin/目录,即C:\Program Files\Java\jdkxxxx\

记住在升级Java之后也要编辑JAVA_HOME

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

虽然你已经修改了PATH,但所有正在运行的程序,包括cmd,只能看到旧的PATH。这是因为所有环境变量的列表只在程序开始执行时复制到程序中;此后,它只查询缓存的副本。

没有好办法刷新cmd的环境变量,所以只需关闭命令提示符并重新打开它。如果您正在使用IDE,也请关闭并重新打开它。

另请参阅

如果java命令正在工作,并且javac出现问题。然后首先检查jdk的bin目录下是否有javac.exe文件。 如果javac.exe文件存在,则将JAVA_HOME设置为系统变量

检查环境变量。

在我的例子中,我在系统变量和我的用户帐户变量中设置了JAVA_HOME,后者被设置为错误的Java版本。我在Path变量上也遇到了同样的问题。

从我的用户帐户中删除JAVA_HOME变量之后,并从path变量中删除错误的路径,它可以正常工作。

< p >试试. . 我也有它,但现在它解决了XP..

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

在命令提示符下执行如下命令:

set Path="C:\Program Files\Java\jdk1.7.0_09\bin"

set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

我已经试过了,效果不错。