问题
我正在尝试使用RNetLogo包在R中启动NetLogo实例,该包具有rJava作为依赖项。
在安装rJava 0.9-9(来自rforge的最新开发快照)期间,我收到以下错误:
warning: [options] bootstrap class path not set in conjunction with -source 1.6
这似乎是指Java版本6,即使我的机器上只有版本8。但是,rJava的开发人员似乎会说here,只要程序包安装并正确加载它,它就会忽略警告。此外,.jinit()似乎正确运行:
> .jinit()
[1] 0
并检测到正确的Java版本:
> .jcall("java/lang/System", "S", "getProperty", "java.runtime.version")
[1] "1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12"
因此,加载RNetLogo后,我尝试启动NetLogo实例。这是我正在运行的最小代码:
library(RNetLogo)
nl.path <- "~/NetLogo 6.0.2/app"
NLStart(nl.path, gui = FALSE, nl.jarname='netlogo-6.0.2.jar')
返回以下错误:
java.lang.NoClassDefFoundError: org/nlogo/workspace/Controllable
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
Caused by: java.lang.ClassNotFoundException
at RJavaClassLoader.findClass(RJavaClassLoader.java:383)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
我使用RStudio或从终端运行R(包括以root身份运行)得到同样的问题。
我的完整sessionInfo():
R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.3 LTS
Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 LC_PAPER=en_GB.UTF-8 LC_NAME=en_GB.UTF-8
[9] LC_ADDRESS=en_GB.UTF-8 LC_TELEPHONE=en_GB.UTF-8 LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RNetLogo_1.0-4 igraph_1.1.2 rJava_0.9-9
loaded via a namespace (and not attached):
[1] compiler_3.4.3 magrittr_1.5 tools_3.4.3 pkgconfig_2.0.1
尝试修复
根据其他似乎相关的用户问题,我还尝试了以下内容:
°在/etc/profile.d /中设置环境变量:
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
export PATH="$PATH:$HOME/bin:$JAVA_HOME/bin"
export LD_LIBRARY_PATH="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server"
export CLASSPATH="$ClASSPATH:$HOME/R/x86_64-pc-linux-gnu-library/3.4/rJava/java"
°跑步 sudo R CMD javareconf -e
°添加几行作为mac OS修复程序添加到我的脚本开头:
Sys.setenv(NOAWT=1)
dyn.load('/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so')
提前致谢。
答案 0 :(得分:1)
我花了很多时间盯着这个问题,假设我有同样的问题因为我得到了同样的错误。因此,对于未来的读者:在Ubuntu 17.10上,使用rJava 0.9-9,NetLogo 6.0.3和RNetLogo 1.0-4,使用Oracle 9 Java SDK时会出现相同的错误。回到8可以解决它。
对于OP:〜/ in nl.path可能是问题所在。在我的系统上它不起作用,但是指定完整路径(即home / user_name / ...)。
答案 1 :(得分:1)
在Ubuntu 16.04上,将NetLogo 5.3.1的rNetLogo 1.0-4与openjdk-8结合使用时遇到了相同的问题。我没有运气就尝试过openjdk-8和Oracle Java 8(使用ppa:webupd8team / java)。
最后,它可以作为Ubuntu软件包(r-cran-rjava)与rJava一起使用,并返回到rNetLogo 1.0-0(我想是可以做到的),仍然使用Oracle Java 8。
url = 'https://cran.r-project.org/src/contrib/Archive/RNetLogo/RNetLogo_1.0-0.tar.gz'
install.packages(url, repos=NULL, type="source")