需要运行一些诊断程序,但在此之前,请将 Netlogo/ 文件夹中 Java/ 文件夹中的所有 .jar 文件复制到 NetLogo 5.3.0.app 所在的同一文件夹中。
然后确保在 dir 路径中有 /app,在 nl.jarname 参数中有 NL 版本。
# get packages from source
p<-c("rJava", "RNetLogo"); remove.packages(p)
install.packages("rJava", repos = "https://cran.r-project.org/", type="source")
install.packages("RNetLogo", repos = "https://cran.r-project.org/", type="source")
library(rJava);library(RNetLogo)
nl_path = "C:/Program Files/NetLogo 5.3.0/app"
ver_nl <- "5.3.0"
NLStart(nl_path,gui=F,nl.jarname = paste0("netlogo-",ver_nl,".jar")) # open netlogo without gui
# NLLoadModel("path-to-nl-model",nl.obj=NULL) # load model with nl.obj=NULL
如果失败,请按顺序运行这些诊断程序。您应该没有 rJava 错误。如果这样做,请确保您安装了最新版本的 Java SE:
https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
# test 1
install.packages("rJava", repos = "https://cran.r-project.org/", type="source"); library(rJava)
.jinit()
.jnew( "java/awt/Point", 10L, 10L )
f <- .jnew("java/awt/Frame","Hello")
.jcall(f,,"setVisible",TRUE)
t1err <- geterrmessage()
# test 2
component <- .jnull()
component <- .jcast(component, new.class = "java/awt/Component")
message <- .jnew("java/lang/String","This is a JOptionPane test from rJava.")
message <- .jcast(message, new.class = "java/lang/Object")
title <- .jnew("java/lang/String","Test")
type <- .jnew("java/lang/Integer", as.integer(2))
f <- .jnew("javax/swing/JOptionPane")
.jcall(f,"showMessageDialog", component, message, title, .jsimplify(type))
t2err <- geterrmessage()
# # test 3
.jcall("java/lang/System", "S", "getProperty", "java.vm.version")
.jcall("java/lang/System", "S", "getProperty", "java.vm.name")
.jcall("java/lang/System", "S", "getProperty", "java.vm.info")
.jcall("java/lang/System", "S", "getProperty", "java.runtime.version")
.jcall("java/lang/System", "S", "getProperty", "sun.arch.data.model")
t3err <- geterrmessage()
# test 4
.jcall("java/lang/System", "S", "getProperty", "java.awt.headless")
Sys.getenv("NOAWT")
t4err <- geterrmessage()
errorlist <- function(){
if(geterrmessage()==t1err){stop("Failed Test 1 — Headless exception \n \n Wrong awt GUI support for Java/rJava",call.=T)}
if(geterrmessage()==t2err){stop("Failed Test 2 — Invalid method name for RcallMethod (unable to open dialog box)",call.=T)}
if(geterrmessage()==t3err){stop("Failed Test 3 — Old version of Java. \n \n Download latest version \n \n > https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html.",call.=T)}
if(geterrmessage()==t4err){stop("Failed Test 4 — ",call.=T)}
}
最后的替代方法是从 JGR 运行 RNetLogo,它在 Mac 上以无头模式运行。
install.packages('JGR',,'http://www.rforge.net/') # note the extra comma
library(JGR)
JGR::JGR()