系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe。

54

我正在使用Windows 8上的JDK 8u25,并且在我的Java安装中遇到了问题。我可以完美地运行javac,但是运行java会显示以下错误消息:

The system cannot find the file C:\ProgramData\Oracle\Java\javapath\java.exe

我应该如何解决这个问题?


我想这个问题与我的环境变量有关。

我设置的重要变量包括:

  • JAVA_HOMEC:\Program Files\Java\jdk1.8.0_25
  • CLASSPATH.;%JAVA_HOME%\lib
  • PATH<other paths omitted>;%JAVA_HOME%\bin

在cmd中使用set命令查看它们的展开结果如下:

  • JAVA_HOMEC:\Program Files\Java\jdk1.8.0_25
  • CLASSPATH.;C:\Program Files\Java\jdk1.8.0_25\lib;%CLASSPATH%;
  • PATHC:\ProgramData\Oracle\Java\javapath;C:\Program Files\Java\jdk1.6.0_45\bin;<other paths omitted>;C:\Program Files\Java\jdk1.8.0_25\bin

完整的set输出可以在这里查看。


请查看以下链接,了解如何设置环境变量。https://dev59.com/Q3I-5IYBdhLWcg3wy7wd - Johny
您可以通过打开命令提示符并输入“set”来检查您的环境变量。 - CocoNess
1
一个不相关的问题..像这样透露我的环境变量是危险的吗? - JavaBeginner
1
你的屏幕截图显示了一个奇怪的字符,而不是 \ 。为什么?我无法识别这个字符。透露你的环境变量可能不是一个好主意。你应该只显示相关的变量。 - CocoNess
这是相关环境变量的图片:http://i58.tinypic.com/5aq4om.jpg - JavaBeginner
显示剩余3条评论
22个回答

55
我遇到了一个类似的问题,目前正在努力解决。我不能保证这个解决方案能解决你的错误,因为可能存在其他软件问题(就像我在Eclipse Luna中遇到的情况)。
Java正在使用你的PATH变量中给出的路径,也就是说,
  C:\ProgramData\Oracle\Java\javapath

去这个文件夹(ProgramData是隐藏的,如果需要的话,请取消隐藏),然后右键点击java.exe的符号链接。在目标字段中,你会看到它正在寻找java.exe的位置。它可能指向你之前安装的jdk1.6.0_45中的java.exe文件。要么在这里粘贴新的快捷方式,要么像其他人提到的那样更改PATH设置。
我发现Java安装程序不会更改javapath或更新系统路径,至少在从1.8到1.7的过程中是这样。在我的情况下,只更改快捷方式导致Eclipse启动时出现问题。
编辑:----- 在尝试使用javapath文件夹的快捷方式后,结果发现你需要使用符号链接,至少对于Eclipse来说是这样。请参考Windows如何创建目录符号链接
对于文件符号链接,你不需要使用/d开关。
  cd C:\ProgramData\Oracle\Java\javapath 

  mklink java.exe "C:\Program Files\Java\jdk1.8.0_20\bin\java.exe"
  mklink javaw.exe "C:\Program Files\Java\jdk1.8.0_20\bin\javaw.exe"
  mklink javaws.exe "C:\Program Files\Java\jdk1.8.0_20\bin\javaws.exe"

这对我来说现在可以运作了。

6
似乎在Windows 7上无法正常工作 - 由于最近更改了符号链接的处理方式,其GUI显示错误,称在使用符号链接时找不到“java [w /ws] .exe”。更安全的方法是创建一个目录连接:rmdir /s /q %ProgramData%\Oracle\Java\javapath & mlink /d %ProgramData%\Oracle\Java\javapath %ProgramFiles%\Java\jre1.8.0_60\bin - dan
4
在运行这些mklink之前,请确保使用cd C:\ProgramData\Oracle\Java\javapathdel java*.exe命令,否则将在当前的cmd目录中创建新的符号链接。请注意不要改变原文的意思。 - Noam Manos
4
你可能需要以管理员身份运行命令提示符,否则你可能会遇到权限问题(就像上面的Igor所遇到的一样)。 - Ti Strga
我很惊讶为什么Java甚至要求某些文件在“C:\Program Files\Common Files\Oracle\Java\javapath”目录中。这相当令人困惑。如果我想针对不同的JDK,该怎么办? - Ivan_a_bit_Ukrainivan

21

Oracle为什么会采用如此糟糕的方式来指向Java,这超出了我的理解。我们通过创建指向JDK的新链接解决了这个问题。

mklink /d C:\ProgramData\Oracle\Java\javapath "C:\Program Files\Java\jdk1.8.0_40\bin\"
同样的方法也适用于只需要JRE的情况。
这将替换C:\ProgramData\Oracle\Java\javapath中旧的符号链接(如果它们之前存在)。

1
这适用于Java,但不适用于javac:无法找到或加载主类com.sun.tools.javac.Main。 - Alexei Kaigorodov
9
为什么Oracle指向Java的方式如此糟糕,我无法理解。我猜原因是当您有相对恒定的环境变量(始终指向一个位置 - 例如javapath文件夹)时,您可以动态地更改路径而不需要重新启动shell(更改链接不需要重新启动shell)。而如果您更改了环境变量(例如PATH),则必须重新启动shell才能重新加载和应用新的ENVVAR值。当然,我并不是Oracle的支持者,这只是我的建议。 - lospejos
2
我收到了“当该文件已经存在时无法创建文件”的错误信息。 - CodeSlave

15

我在PATH中拥有:

C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Java\jdk1.8.0_92\bin;<others omitted>

我删除了:

C:\ProgramData\Oracle\Java\javapath;

这个方法解决了我的问题。现在,java -version 命令会显示Java版本等详细信息。


1
这刚好为我解决了问题。谢谢。 - Marcellin Wabo

6
这将解决所有与Java和环境变量相关的问题:
  1. Make your way to Windows' Environment Variables dialog.
  2. Under System variables, select the variable named Path. Click Edit...
  3. Remove the entry that looks like:

    C:\ProgramData\Oracle\Java\javapath
    
  4. Add the path of your JDK/JRE's bin folder.

  5. Don't forget to set JAVA_HOME.

5
我在运行JAVA命令时遇到了同样的错误。为了解决这个问题,我把Java路径移动到PATH环境变量的第一个位置,问题得到了解决。请参考下面的截图:

enter image description here


2

更新PATH环境变量

如果您没有设置PATH变量,每次运行可执行文件时都需要指定完整路径,例如:

C:\> "C:\Program Files\Java\jdk1.8.0\bin\javac" MyClass.java

设置 PATH 变量是有用的,因为它可以在重启后持久存在。
要永久设置 PATH 变量,请将 jdk1.8.0\bin 目录的完整路径添加到 PATH 变量中。通常,这个完整路径看起来像这样:C:\Program Files\Java\jdk1.8.0\bin。
在 Microsoft Windows 上设置 PATH 变量的方法如下:
1. 点击“开始”,然后点击“控制面板”,再点击“系统”。 2. 点击“高级系统设置”,然后点击“环境变量”。 3. 在“系统变量”中的 PATH 变量中添加 JDK 安装的 bin 文件夹的位置。以下是 PATH 变量的典型值: C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Java\jdk1.8.0\bin
注意: - PATH 环境变量是一系列由分号(;)分隔的目录,不区分大小写。Microsoft Windows 按照从左到右的顺序在 PATH 目录中查找程序。 - 一次只能有一个 JDK 的 bin 目录在路径中。第一个实例后面的都会被忽略。 - 如果不确定应该在哪里添加 JDK 路径,请将其追加到 PATH 变量末尾。
设置 PATH 变量后,每次打开新的命令窗口时都会生效。

1
Java安装说明 - Morgan

2
  1. 从Java控制面板卸载计算机上安装的所有JDK
  2. 搜索 C:\ProgramData\Oracle\Java 并删除该目录及其中包含的所有文件。您可以使用命令行执行 rmdir /S C:\ProgramData\Oracle\Java
  3. 然后搜索C:\ProgramData\Oracle并删除oracle文件夹。您可以使用 rmdir /S C:\ProgramData\Oracle 执行此操作
  4. 现在安装JDK并设置路径。

  5. 运行程序,您将不再遇到相同的问题。


1
在您的 PATH 变量 中有 2 个版本的 jdk,分别是 jdk1.6.0_45jdk1.8.0_25。请尝试从 PATH 中删除第一个(即 jdk1.6.0_45)。

我检查了一下,发现有一些来自Java 6版本的东西,但我无法摆脱它。你知道这个错误是什么意思吗?图片:http://i62.tinypic.com/vxn0vn.jpg - JavaBeginner

1
如果您正在使用受组策略限制的公司电脑,这可能有效...。
假设:
1. 您的Windows PATH包括C:\ProgramData\Oracle\Java\javapath 2. 您已经安装了JDK到C:\Program Files\Java\jdk1.8.0_60\bin 然后创建以下文本文件mklink.bat并将其放在桌面上:
rem mklink.bat
mklink /d C:\ProgramData\Oracle\Java\javapath "C:\Program Files\Java\jdk1.8.0_60\bin"
pause

现在右键单击它,选择“以管理员身份运行”。提供管理员凭据。脚本应该报告成功。现在您可以编译或运行Java。

1
这个问题出现在从一个版本升级到另一个版本时,因为JDK没有自动升级。你可以更改环境变量。在系统变量中查找“PATH”,并将JDK bin位置添加到字符串的前面(不是后面)。完成后,在CMD中检查“java”和“javac”是否可用。如果可用,再次进入系统变量。添加“CLASSPATH”作为变量,并设置值“c:\Program Files\Java\jdk1.8.0_91\lib;”。

请告诉我您的问题。您的进展如何?请更详细地解释,并使用适当的格式。 - Sagar Nayak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接