【问题标题】:Error when using RNetlogo to start Netlogo使用 RNetlogo 启动 Netlogo 时出错
【发布时间】:2020-02-08 07:10:19
【问题描述】:

我在Netlogo中搭建了一个仿真模型,希望能优化模型参数(30左右)。由于 Netlogo 不支持使用不同参数集自动执行多次运行,因此我正在考虑使用另一个平台(R/python/Java)来调用 Netlogo,分析模拟结果,并找到最佳参数。

但是,到目前为止,它们都不起作用...在 R 中,我在使用 RNetLogo 启动 Netlogo 时遇到了错误。我已经尝试了所有可以在网上找到的潜在解决方案,但仍然没有弄清楚问题所在。如果有人可以提供帮助,将不胜感激。

代码:

library(RNetLogo)
nl.path = "C:/Program Files/NetLogo 5.3/app"
NLStart(nl.path, gui=FALSE, nl.jarname = 'NetLogo.jar')

错误信息:

java.lang.NoClassDefFoundError: org/nlogo/api/Exceptions$Handler
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
Caused by: java.lang.ClassNotFoundException
at RJavaClassLoader.findClass(RJavaClassLoader.java:383)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more

版本:

- system: Windows 10
- R: 3.3.3
- Netlogo: 5.3/5.3.1/6.0/6.0.2 (tried all of them, same error message)
- Java: 1.8.0_151-b12 (this is the one called in R, checked by .jcall)
- RNetlogo and rJava are most up-to-date as of 1/9/2018

【问题讨论】:

    标签: r netlogo


    【解决方案1】:

    如果您使用 NetLogo 安装中包含的 java 环境,它是否解决了您的问题?

    在 R 中安装或加载 RNetLogo 之前尝试这个:

    Sys.setenv(JAVA_HOME="YOUR-INSTALLATION-PATH\\NetLogo 6.0.1\\runtime")
    

    【讨论】:

      【解决方案2】:

      我在 5.3.1 中肯定遇到了同样的错误。出于好奇,这适用于您的版本 6.0.2 吗?

      library(RNetLogo)
      nl.path <- "C:/Program Files/NetLogo 6.0.2/app"
      NLStart(nl.path, gui = FALSE, nl.jarname = "netlogo-6.0.2.jar")
      

      【讨论】:

        【解决方案3】:

        需要运行一些诊断程序,但在此之前,请将 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()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-08
          • 1970-01-01
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多