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

当前回答

博士TL;

对于有经验的读者:

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


欢迎光临!

您遇到了Java初学者面临的最臭名昭著的技术问题之一:'xyz'不能被识别为内部或外部命令……错误消息。

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

环境变量和PATH

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

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

环境变量是一个特殊的键值对(例如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不是一个内部命令时,会搜索用户PATH后面的系统PATH。它机械地进入列表中的每个目录,并检查是否存在javac.com、javac.exe、javac.bat等。当它找到javac时,就运行它。如果不这样做,则打印“javac”不被识别为内部或外部命令、可操作程序或批处理文件。

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

JDK与JRE

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

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

Java运行时环境(JRE),包括运行Java程序所需的工具,但不包括编译新程序的工具——它包含Java而不包含javac。 Java开发工具包(JDK),它包含Java和javac,以及许多其他开发工具。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

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

该命令将从PATH中删除所有其他内容,并将其替换为Java路径。执行此命令后,您可能会发现其他各种命令都不起作用。 您的Java路径可能不是C:\Program Files\Java\ jdk1.7.0_09\bin—您几乎肯定有一个更新版本的JDK,它会有不同的路径。 新的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路径。

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

打开设置对话框

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

试试这些方法:

Start Menu/taskbar search box » search for "environment variable" Win + R » control sysdm.cpl,,3 Win + R » SystemPropertiesAdvanced.exe » Environment Variables File Explorer » type into address bar Control Panel\System and Security\System » Advanced System Settings (far left, in sidebar) » Environment Variables Desktop » right-click This PC » Properties » Advanced System Settings » Environment Variables Start Menu » right-click Computer » Properties » Advanced System Settings » Environment Variables Control Panel (icon mode) » System » Advanced System Settings » Environment Variables Control Panel (category mode) » System and Security » System » Advanced System Settings » Environment Variables Desktop » right-click My Computer » Advanced » Environment Variables Control Panel » System » Advanced » Environment Variables

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

如果你使用的是Windows 10,微软已经为你提供了一个漂亮的新UI来编辑PATH。否则,您将看到PATH被完整的分号封装在一个单行文本框中。尽最大努力在不破坏系统的情况下进行必要的编辑。

干净的道路

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

Check for other Java paths and remove them. Their existence can cause all sorts of conflicts. (For instance, if you have JRE 8 and JDK 11 in PATH, in that order, then javac will invoke the Java 11 compiler, which will create version 55 .class files, but java will invoke the Java 8 JVM, which only supports up to version 52, and you will experience unsupported version errors and not be able to compile and run any programs.) Sidestep these problems by making sure you only have one Java path in PATH. And while you're at it, you may as well uninstall old Java versions, too. And remember that you don't need to have both a JDK and a 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构建系统Maven和Gradle,如果没有正确设置,将抛出错误。

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

还记得在升级Java之后编辑JAVA_HOME。

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

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

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

另请参阅

什么是PATH和其他环境变量,如何设置或使用它们? 如何设置或更改PATH系统变量? Windows下如何设置路径和环境变量 Windows 10下如何设置Path环境变量

其他回答

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

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

博士TL;

对于有经验的读者:

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


欢迎光临!

您遇到了Java初学者面临的最臭名昭著的技术问题之一:'xyz'不能被识别为内部或外部命令……错误消息。

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

环境变量和PATH

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

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

环境变量是一个特殊的键值对(例如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不是一个内部命令时,会搜索用户PATH后面的系统PATH。它机械地进入列表中的每个目录,并检查是否存在javac.com、javac.exe、javac.bat等。当它找到javac时,就运行它。如果不这样做,则打印“javac”不被识别为内部或外部命令、可操作程序或批处理文件。

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

JDK与JRE

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

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

Java运行时环境(JRE),包括运行Java程序所需的工具,但不包括编译新程序的工具——它包含Java而不包含javac。 Java开发工具包(JDK),它包含Java和javac,以及许多其他开发工具。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

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

该命令将从PATH中删除所有其他内容,并将其替换为Java路径。执行此命令后,您可能会发现其他各种命令都不起作用。 您的Java路径可能不是C:\Program Files\Java\ jdk1.7.0_09\bin—您几乎肯定有一个更新版本的JDK,它会有不同的路径。 新的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路径。

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

打开设置对话框

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

试试这些方法:

Start Menu/taskbar search box » search for "environment variable" Win + R » control sysdm.cpl,,3 Win + R » SystemPropertiesAdvanced.exe » Environment Variables File Explorer » type into address bar Control Panel\System and Security\System » Advanced System Settings (far left, in sidebar) » Environment Variables Desktop » right-click This PC » Properties » Advanced System Settings » Environment Variables Start Menu » right-click Computer » Properties » Advanced System Settings » Environment Variables Control Panel (icon mode) » System » Advanced System Settings » Environment Variables Control Panel (category mode) » System and Security » System » Advanced System Settings » Environment Variables Desktop » right-click My Computer » Advanced » Environment Variables Control Panel » System » Advanced » Environment Variables

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

如果你使用的是Windows 10,微软已经为你提供了一个漂亮的新UI来编辑PATH。否则,您将看到PATH被完整的分号封装在一个单行文本框中。尽最大努力在不破坏系统的情况下进行必要的编辑。

干净的道路

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

Check for other Java paths and remove them. Their existence can cause all sorts of conflicts. (For instance, if you have JRE 8 and JDK 11 in PATH, in that order, then javac will invoke the Java 11 compiler, which will create version 55 .class files, but java will invoke the Java 8 JVM, which only supports up to version 52, and you will experience unsupported version errors and not be able to compile and run any programs.) Sidestep these problems by making sure you only have one Java path in PATH. And while you're at it, you may as well uninstall old Java versions, too. And remember that you don't need to have both a JDK and a 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构建系统Maven和Gradle,如果没有正确设置,将抛出错误。

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

还记得在升级Java之后编辑JAVA_HOME。

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

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

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

另请参阅

什么是PATH和其他环境变量,如何设置或使用它们? 如何设置或更改PATH系统变量? Windows下如何设置路径和环境变量 Windows 10下如何设置Path环境变量

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

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

or

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

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

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

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

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