R寻找错误的java版本

时间:2010-03-17 18:12:11

标签: java windows r

我现在多次安装/卸载java jre / jdk,最后安装了旧版本1.6.0_17,现在位于“C:\ Program Files \ Java \ jre6 \ bin”。毕竟如果我在R中调用'java -version',我可以看到R在旧路径上寻找Java,现在是错误的。问题是:为什么R在错误的路径上寻找Java,即使Windows路径设置正确?据我所知,在windows路径中没有双重命令,从那时起我重新启动了R以及Windows。 R从哪条路走错了路径?

在Windows shell上:
$>set
[..]
OS=Windows_NT
Path=C:\Program Files\Java\jre6\bin;
[..]

$> java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)

R中的

$>system("java -version")
Error: could not open `C:\Program Files (x86)\Java\jre6\lib\i386\jvm.cfg'

4 个答案:

答案 0 :(得分:2)

您的问题取决于64/32位版本 您运行32位R,它使用32位命令提示符并找到32位Java。如果你使用64位R,那么它运行64位命令promt和正确的java。

您可以通过运行32位命令promt(this post之后)来检查它:

  1. 点击开始。
  2. 在“开始搜索”框中键入%windir%\SysWoW64\cmd.exe
  3. 按Enter键。
  4. 输入java -version
  5. 在我的系统中,它失败了,因为我没有32位java。使用标准的cmd.exe,我得到了正确的路径。

    对于可能的解决方案,有两种方法。安装32位R和32位Java或64位R(即officially supported from 2.11 version)和64位Java。在我的系统(64位Windows 7)上,我有两套,所以我得到了32位组合:

    > system("java -version")
    java version "1.6.0_20"
    Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
    Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
    

    在64位上:

    > system("java -version")
    java version "1.6.0_18"
    Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
    Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
    

    在64位版本上,您可以使用32位cmd调用32位Java:

    shell(
        "java -version",
        shell = file.path(Sys.getenv("windir"),"SysWoW64/cmd.exe")
    )
    java version "1.6.0_20"
    Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
    Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
    

    关于Shane的评论我认为问题是R如何获得32位cmd的路径。因为我找不到在32位R上调用64位cmd的方法。

答案 1 :(得分:2)

我到了这个页面试图解决为什么我的JDK报告64位,尽管PATH和JAVA_HOME指向32位。

我甚至不知道R是什么,但这篇文章可能有所帮助(它为我解决了)

http://www.tipandtrick.net/2008/how-to-open-and-run-32-bit-command-prompt-in-64-bit-x64-windows/

简而言之,不要从'cmd'运行'%windir%\ SysWoW64 \ cmd.exe'。 或者,将JDK放在路径的前端而不是末尾(我不认为这是理想的)。

答案 2 :(得分:1)

你假设R正在查看Windows路径,但代码告诉你它不是。因此,请检查您的假设:R正在其他地方获得路径。

如果我在Windows机器上打开命令shell并输入“java -version”,我会得到:

C:\>java -version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)

如果我检查机器上的PATH,我会(为清晰起见而编辑):

C:\>set path
Path=;C:\JDKs\jdk1.6.0_13\bin;

如果我打开R版本2.8.1并运行system(“java -version”),我会得到:

> system("java -version")
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
>

所以,就像我说的那样,R没有使用我的路径来查找java.exe。它正在使用其他东西。

答案 3 :(得分:1)

您可能还需要检查注册表,R可能有自己的设置。您也可以启动regedit并搜索它正在启动的二进制路径。