我正在开发一个使用JRI / rJava从Java调用R函数的程序。我在另一台机器上用NetBeans编写程序,它运行正常(即能够运行代码)。从那以后,我搬到了另一台机器上,遇到了问题。
我看到的确切错误信息是:
Cannot find JRI native library!
Please make sure that the JRI native library is in a directory listed in java.library.path.
java.lang.UnsatisfiedLinkError: E:\R\R-2.13.1\library\rJava\jri\jri.dll: The specified path is invalid
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)
at com.rjava.test.rtest.main(rtest.java:64)
Java Result: 1
我已经阅读了JRI / rJava的常见问题解答,并且已经在互联网上搜索修复程序,但没有取得任何进展。以下是我到目前为止所做的事情:
我已重新启动计算机以确保更改仍然存在。
为了确保我正确配置了东西,我在命令行中运行了以下命令:
java -cp E:\R\R-2.13.1\library\rJava\jri\JRI.jar;E:\R\R-2.13.1\library\rJava\jri\examples rtest
示例java文件运行正常。我开始认为我的新机器只是讨厌我。
答案 0 :(得分:2)
该消息表明路径E:\ R \ R-2.13.1 \ library \ rJava \ jri \ jri.dll无效。你确定这条路存在吗?另外,E映射的驱动器是否映射到其中包含空格的路径?我不确定空间是否是问题,但它消除了一个问题。我会尝试将dll放在C:\或某个非常简单的地方,看看它是否可以在那里找到它作为一个简单的测试。
同时验证-Djava.library.path是否按照您的想法传递(您可以使用visualvm或jconsole检查)。
答案 1 :(得分:1)
你可以试试这个:
-Djava.library.path=E:\R\R-2.13.1\library\rJava\jri -cp E:\R\R-2.13.1\library
\rJava\jri;E:\R\R-2.13.1\library\rJava\jri\JRI.jar;E:\R\R-2.13.1
\library\rJava\jri\examples
我说这个的原因是,也许.dll也需要在类路径和库路径中才能让类加载器加载它?它可能不是真的,但值得一试。 “rJava”也正确吗?除此之外,我认为你做得对。
答案 2 :(得分:0)
要找到随rJava一起安装的JRI,请在R。
中使用system.file("jri",package="rJava")
设置路径的路径(windows中的环境变量), 重启你的netbeans。并尝试再次运行您的程序