我在尝试编译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.
6 回答
TL; DR
对于有经验的读者
找到Java路径;它看起来像这样:
C:\Program Files\Java\jdkxxxx\bin\
开始菜单搜索"environment variable"以打开选项对话框 .
检查
PATH
. 删除旧的Java路径 .将新的Java路径添加到
PATH
.编辑
JAVA_HOME
.关闭并重新打开控制台/ IDE .
欢迎!
您遇到了Java初学者面临的最臭名昭着的技术问题之一:
'xyz' is not recognized as an internal or external command...
错误消息 .简而言之, you have not installed Java correctly . 在Windows上完成Java的安装需要一些手动步骤 . 安装Java后必须始终执行这些步骤,包括升级JDK之后 .
环境变量和PATH
(如果您已经理解了这一点,请随意跳过接下来的三个部分 . )
运行
javac HelloWorld.java
时,cmd必须确定javac.exe
的位置 . 这是通过环境变量PATH
完成的 .environment variable是一个特殊的键值对(例如
windir=C:\WINDOWS
) . 大多数都带有操作系统,有些是系统正常运行所必需的 . 它们的列表在启动时传递给每个程序(包括cmd) . On Windows,有two types:用户环境变量和系统环境变量 .你可以看到你的环境变量:
最重要的变量是PATH . 它是一个路径列表,由
;
分隔 . 将命令输入cmd后,将扫描列表中的每个目录以查找匹配的可执行文件 .在我的电脑上,
PATH
是:当您运行
javac HelloWorld.java
,cmd时,在意识到javac
不是internal command时,搜索system PATH followed by the user PATH . 它机械地输入列表中的每个目录,并检查是否存在javac.com, javac.exe, javac.bat, etc. . 当它找到javac
时,它会运行它 . 当它没有,它打印'javac' is not recognized as an internal or external command, operable program or batch file.
您必须将Java可执行文件目录添加到
PATH
.JDK与JRE
(如果您已经理解了这一点,请随意跳过本节 . )
下载Java时,您可以选择:
Java Runtime Environment(JRE),包括运行Java程序的必要工具,但不包括编译新程序 - 它包含
java
但不包含javac
.Java Development Kit(JDK),包含
java
和javac
,以及许多其他开发工具 . JDK是JRE的超集 .你必须确保 you have installed the JDK . 如果您只安装了JRE,则无法执行
javac
,因为您的硬盘驱动器上没有安装Java编译器 . 检查您的Windows程序列表,并确保Java包的名称中包含单词"Development Kit" .不要使用set
(如果您还没有计划,请跳过此部分 . )
其他几个答案建议执行以下变体:
不要那样做 . 该命令有几个主要问题:
此命令 erases everything else 来自
PATH
并将其替换为Java路径 . 执行此命令后,您可能会发现其他各种命令无效 .您的Java路径 is probably not
C:\Program Files\Java\jdk1.7.0_09\bin
- 您几乎肯定有更新版本的JDK,它将具有不同的路径 .当前cmd会话的新
PATH
only applies . 每次打开命令提示符时都必须重新输入set
命令 .点#1和#2可以通过这个稍微好一点的版本来解决:
但总的来说这只是一个坏主意 .
查找Java路径
正确的方法从找到安装Java的位置开始 . 这取决于您如何安装Java .
Exe安装程序
您已通过运行安装程序安装了Java . Oracle的安装程序将Java版本放在
C:\Program Files\Java\
(或C:\Program Files (x86)\Java\
)下 . 使用文件资源管理器或命令提示符,导航到该目录 .每个子文件夹代表一个Java版本 . 如果只有一个,你就找到了它 . 否则,请选择看起来像较新版本的那个 . 确保文件夹名称以
jdk
开头(而不是jre
) . 输入目录 .然后输入
bin
那个目录 .您现在位于正确的目录中 . 复制路径 . 如果在文件资源管理器中,单击地址栏 . 如果在命令提示符下,copy提示 .
生成的Java路径应采用(不带引号)的形式:
Zip文件
您已经下载了包含JDK的.zip . 将它提取到一些随意的地方,它不会妨碍你;
C:\Java\
是可以接受的选择 .然后在其中的某个位置找到
bin
文件夹 .您现在位于正确的目录中 . 复制其路径 . 这是Java路径 .
请记住永远不要移动文件夹,因为这会使路径无效 .
打开设置对话框
这是编辑
PATH
的对话框 . 有许多方法可以访问该对话框,具体取决于您的Windows版本,UI设置以及系统配置的混乱程度 .尝试其中一些:
开始菜单/任务栏搜索框»搜索"environment variable"
赢得R»
control sysdm.cpl,,3
Win R»
SystemPropertiesAdvanced.exe
»环境变量文件资源管理器»输入地址栏
Control Panel\System and Security\System
»高级系统设置(左侧,侧栏)»环境变量桌面»右键单击此PC»属性»高级系统设置»环境变量
开始菜单»右键单击计算机»属性»高级系统设置»环境变量
控制面板(图标模式)»系统»高级系统设置»环境变量
控制面板(类别模式)»系统和安全»系统»高级系统设置»环境变量
桌面»右键单击我的电脑»高级»环境变量
控制面板»系统»高级»环境变量
其中任何一个都应该带您进入正确的设置对话框 .
如果您使用的是Windows 10,则Microsoft已通过fancy new UI祝福您编辑
PATH
. 否则,你将看到PATH
完整的分号镶嵌的荣耀,挤进一个单行文本框 . 尽力在不破坏系统的情况下进行必要的编辑 .清洁路径
看看
PATH
. 你几乎肯定有两个PATH
变量(因为用户与系统环境变量) . 你需要看看他们两个 .检查 other Java paths 并将其删除 . 它们的存在可能导致各种冲突 . (例如,如果
PATH
中有JRE 8和JDK 11,那么javac
将调用Java 11编译器,它将创建版本55.class
文件,但java
将调用Java 8 JVM,它只支持最多版本52,您将体验unsupported version errors并且无法编译和运行任何程序 . )通过确保在PATH
中只有一个Java路径来解决这些问题 . 当你在它的时候,你也可以uninstall old Java versions . 请记住,你是JDK和JRE的_1603343 .如果您有
C:\ProgramData\Oracle\Java\javapath
, remove that as well . Oracle旨在通过创建始终指向最新Java安装的symbolic link来解决升级后Java路径中断的问题 . 不幸的是,它往往最终指向错误的位置或simply not working . 最好删除此条目并手动管理Java路径 .现在也是在
PATH
上进行一般内务管理的好机会 . 如果您的PC上不再安装与软件相关的路径,则可以将其删除 . 你也可以改变路径的顺序(如果你关心这样的事情) .添加到PATH
现在使用您在三步之前找到的Java路径,并将其放在系统
PATH
中 .你的新路径在列表中的位置无关紧要;把它放在最后是一个很好的选择 .
如果您使用的是Windows 10之前的UI,请确保已正确放置分号 . 应该只有一个分隔列表中的每个路径 .
这里真的没什么好说的 . 只需将路径添加到
PATH
,然后单击“确定” .设置JAVA_HOME
当你在它的时候,你也可以设置
JAVA_HOME
. 这是另一个应该包含Java路径的环境变量 . 许多Java和非Java程序,包括流行的Java构建系统Gradle,如果未正确设置,将抛出错误 .如果
JAVA_HOME
不存在,请将其创建为新的系统环境变量 . 将其设置为您添加到PATH
的相同Java路径 .请记住在升级Java之后编辑
JAVA_HOME
.关闭并重新打开命令提示符
虽然您已经修改了
PATH
,但所有正在运行的程序,包括cmd,只看到旧的PATH
. 这是因为所有环境变量的列表仅在程序开始执行时被复制到程序中;此后,它只参考缓存的副本 .没有好办法refresh cmd's environment variables,所以只需关闭命令提示符并再次打开它 . 如果您使用的是IDE,请关闭并重新打开它 .
另见
What are PATH and other environment variables, and how can I set or use them?
How do I set or change the PATH system variable?
How to set the path and environment variables in Windows
How to set Path environment variables in Windows 10
试试这个..我也有它但现在它在XP中解决了..
您错误输入了
set
命令 - 您在C:
之后错过了反斜杠 . 它应该是:如果java命令正在运行并且遇到javac问题 . 然后首先检查jdk的bin目录javac.exe文件是否存在 . 如果存在javac.exe文件,则将
JAVA_HOME
设置为System变量 .从命令提示符运行以下命令:
set Path="C:\Program Files\Java\jdk1.7.0_09\bin"
或set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"
我试过这个,效果很好 .
检查您的环境变量 .
在我的情况下,我在 System variables 以及我的 User Account 变量中设置了JAVA_HOME,后者设置为 wrong version of Java . 我也遇到了与Path变量相同的问题 .
在 deleting JAVA_HOME from my User Account 变量之后并从Path变量中删除了错误的路径,它正常工作 .