0

javac -version给出正确版本的javac. 但是,java -version给出的错误为

“系统无法执行指定的程序”

PATH 变量正确设置为“C:\Program Files\Java\jdk1.8.0_102\bin”

CMD 的图像

4

3 回答 3

0

该特定错误可能与对 java 可执行文件的符号链接的评估有关。

通常,无效的可执行文件名称(即在路径中未找到的名称)将产生错误并显示以下文本:

'javax' 不是内部或外部命令、可运行程序或批处理文件。

由于您收到不同的错误,这可能不是您的问题。

当在 Windows PC 上安装 java 时,安装程​​序会创建一个目录(通常使用 , 的路径C:\ProgramData\Oracle\Java\javapath并在其中放置 3 个符号链接。它们分别用于java.exejavaw.exejavaws.exe。这可以防止路径变得过于混乱,因为可能会发生冲突的可执行文件名称。

javac.exe(和 keytool 等)之所以有效,是因为您将 JRE/JDK bin 文件夹添加到了 PATH 中。但是为什么 java/javaw/javaws 不工作呢?因为它首先找到javapath上面的目录(从左到右搜索PATH)。您可以使用where命令查看此问题。例如:

C:\>where java
  C:\ProgramData\Oracle\Java\javapath\java.exe
  C:\Program Files (x86)\Java\jre1.8.0_31\bin\java.exe

C:\>where keytool
  C:\Program Files (x86)\Java\jre1.8.0_31\bin\keytool.exe

这将是一个很好的情况,除了javapath\java.exe符号链接不起作用、策略不允许执行或路径错误。

从管理命令提示符处,运行以下命令。结果应该类似于下面

C:\>fsutil behavior query SymlinkEvaluation
    Local to local symbolic links are enabled.
    Local to remote symbolic links are disabled.
    Remote to local symbolic links are disabled.
    Remote to remote symbolic links are disabled.

如果禁用“本地到本地”符号链接,那就是您的问题(因为此设置会阻止以下重新分析点)

您可以使用以下命令启用它们: fsutil behavior set SymlinkEvaluation L2L:1

仔细检查设置是否随query子命令更改。您无需重新启动此设置即可生效。

如果这不能解决您的问题,请确保符号链接的目标存在。尝试通过资源管理器运行它;应弹出一个控制台对话框然后关闭。如果没有,确认它正确的简单方法是右键单击符号链接并选择“打开文件位置”。如果出现错误对话框,说明“快捷方式问题:此快捷方式引用的项目 'java.exe' 已更改或移动 [...] ”,则路径不正确。

您可以通过符号链接属性中的“快捷方式”选项卡查看路径设置的内容。如果路径错误,您可以删除符号链接,然后通过mklink命令重新创建它。删除符号链接,然后从管理命令提示符处运行以下命令;请务必将第二条路径替换为您的实际 JRE/JDK 路径!

mklink C:\ProgramData\Oracle\Java\javapath\java.exe "C:\Program Files (x86)\Java\jre1.8.0_91\bin\java.exe"

此时,从命令行运行“java”,看看它是否有效。

如果没有,请导航到所需的 java.exe,查看其文件属性,并确保底部没有可用的“取消阻止”按钮。如果有,请单击它。

于 2018-05-03T16:42:31.180 回答
0

这不是编程问题。但是您必须将 %JRE_HOME%\bin 添加到 PATH 变量

于 2016-08-23T08:34:45.973 回答
-1

您需要在环境设置中设置 PATH 变量(jre/bin/)。在 cmd 中,设置 PATH ="C:/ProgramFiles/java/jre*/bin"

于 2016-08-23T08:53:22.550 回答