首页 文章

javac未被识别为内部或外部命令,可操作程序或批处理文件[关闭]

提问于
浏览
212

我在尝试编译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 回答

  • 2

    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:用户环境变量和系统环境变量 .

    你可以看到你的环境变量:

    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 不是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),包含 javajavac ,以及许多其他开发工具 . JDK是JRE的超集 .

    你必须确保 you have installed the 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
    

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

    • 此命令 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可以通过这个稍微好一点的版本来解决:

    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 那个目录 .

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

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

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

    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\javapathremove 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,请关闭并重新打开它 .

    另见

  • 343

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

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

    您错误输入了 set 命令 - 您在 C: 之后错过了反斜杠 . 它应该是:

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

    如果java命令正在运行并且遇到javac问题 . 然后首先检查jdk的bin目录javac.exe文件是否存在 . 如果存在javac.exe文件,则将 JAVA_HOME 设置为System变量 .

  • 5

    从命令提示符运行以下命令: set Path="C:\Program Files\Java\jdk1.7.0_09\bin"set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

    我试过这个,效果很好 .

  • 5

    检查您的环境变量 .

    在我的情况下,我在 System variables 以及我的 User Account 变量中设置了JAVA_HOME,后者设置为 wrong version of Java . 我也遇到了与Path变量相同的问题 .

    deleting JAVA_HOME from my User Account 变量之后并从Path变量中删除了错误的路径,它正常工作 .

相关问题