RNetLogo函数NLStart无法启动gui

时间:2013-02-16 22:39:51

标签: r

当我尝试使用NLStart()函数从RStudio启动NetLogo gui时,我收到有关java的消息,并且GUI无法打开。我使用的是Win 7 64位,NetLogo 5.0.3和R 2.15.1以及R studio 0.96.304。 这是R代码......

library(RNetLogo)
nl.path <- "C:\\Program Files (x86)\\NetLogo 5.0.3"
NLStart(nl.path, gui = TRUE, nl.version = 5) 

并返回消息

<java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(Unknown Source)
at java.awt.Window.<init>(Unknown Source)
at java.awt.Frame.<init>(Unknown Source)
at java.awt.Frame.<init>(Unknown Source)
at javax.swing.SwingUtilities$SharedOwnerFrame.<init>(Unknown Source)
at javax.swing.SwingUtilities.getSharedOwnerFrame(Unknown Source)
at javax.swing.JOptionPane.getRootFrame(Unknown Source)
at javax.swing.JOptionPane.showOptionDialog(Unknown Source)
at javax.swing.JOptionPane.showMessageDialog(Unknown Source)
at javax.swing.JOptionPane.showMessageDialog(Unknown Source)
at nlcon.NLink_v5.<init>(NLink_v5.java:108)>

起初我怀疑NetLogo可能在无头模式下运行,但当我尝试使用...打开模型时

model.path <- "\\models\\Sample Models\\Earth Science\\Fire.nlogo"
NLLoadModel(paste(nl.path,model.path,sep=""))

我得到了

<Error in .jcall(nl.obj, "V", "loadModel", .jnew("java/lang/String", model.path)) : 
RcallMethod: invalid object parameter>

这里发生了什么?任何解决方案或线索将不胜感激。 提前致谢

3 个答案:

答案 0 :(得分:2)

首先,请安装最新版本的RNetLogo(0.9.6),可在R-Forge上找到,请参阅此处http://rnetlogo.r-forge.r-project.org/(“如何获取”一节)。但这不会解决您的问题,因为我们发现它不是RNetLogo问题,而是rJava已经出现的问题。 似乎您的Java /配置有问题(不支持可视化显示 - &gt; awt / swing)。

您尚未编写已安装的Java类型(Oracle / Sun JRE,Sun JDK,OpenJDK ...)。 但我认为这不是一般的Java问题(因为你已经能够创建Point对象,导致awt库被安装),但配置问题(由rJava启动的JVM似乎在无头运行模式)。

因为通过远程诊断很难解决这个问题,我会尝试删除Java(以及所有相关的环境变量:JAVA_HOME,PATH中的相应条目,可能是NOAWT等)和rJava,并安装干净的。

但在你这样做之前,我还有两个想法:

  1. 您也可以尝试执行

    Sys.setenv(NOAWT = 0)

    在使用

    启动JVM之前

    .jinit()

    或在加载rJava包之前。但我不是很乐观,因为打电话

    .jcall(“java / lang / System”,“S”,“getProperty”,“java.awt.headless”)

    正如您所报告的,

    不应导致HeadlessException。这看起来很奇怪。 如果你在没有RStudio的情况下完成所有这些工作(也可以从之前的答案),会发生什么?

  2. 您是否能够安装和打开JGR(R提供基于Java的R环境的软件包,请参阅http://cran.r-project.org/web/packages/JGR/index.html)?如果是这样,请尝试从那里启动RNetLogo。

  3. 祝你好运!

答案 1 :(得分:1)

乍一看,这听起来像是一个Java问题,但我不确定。之前从未见过这个错误。

您使用的是哪个Java发行版(OpenJDK,Sun JRE,Sun JDK ......)? 你安装了哪个版本的RNetLogo?

z <- installed.packages()
z["RNetLogo","Version"]

您的错误在第108行引发,其中RNetLogo尝试打开JOptionPane以报告在NetLogo加载期间发生的错误。因此,问题是目前缺少对Java的GUI支持。这也可能是NetLogo未启动的根本问题,但它也可能是不同的。

我的第一个建议是,您要么安装了没有GUI库的轻量级Java,要么将其配置为不使用此类库。

所以,从第一次测试开始: 打开MS-DOS提示符,导航到NetLogo安装:

cd  "C:\Program Files (x86)\NetLogo 5.0.3"

并尝试从那里启动NetLogo:

java -jar NetLogo.jar

发生了什么事?

第二次测试,如果你通过第一次测试: 打开一个新的RStudio会话并加载rJava:

library(rJava)

初始化它:

.jinit()

尝试创建一个简单的awt对象:

.jnew( "java/awt/Point", 10L, 10L )

并尝试打开一个简单的awt窗口:

f <- .jnew("java/awt/Frame","Hello")
.jcall(f,,"setVisible",TRUE)

这应该打开一个简单的窗口(不能与X关闭,因为它没有处理程序 - 只需关闭你的RStudio)。如果没有,那么Java / rJava的awt GUI支持有问题。

至少摆动JOptionPane测试:

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))

将RStudio带回来,你应该看到一个对话窗口。 如果没有,那么Java / rJava的swing支持就会出现问题。

检查,如果rJava以您期望的Java版本运行:

.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")
.jcall("java/lang/System", "S", "getProperty", "java.vm.info")

有什么报告:

.jcall("java/lang/System", "S", "getProperty", "java.awt.headless")

和此:

Sys.getenv("NOAWT")

答案 2 :(得分:0)

我发现将我的所有软件(NetLogo、R 和 Java)设为 64 位(适用于我)或 32 位都可以。在 2021 年打开它可能会略有不同。我发现第一次将代码直接运行到 R GUI 而不是从 RStudio 中也有帮助。我有一个关于如何从 R 打开 NetLogo 的 youtube 视频 (https://www.youtube.com/watch?v=zWMdaTEPTOc),包括故障排除选项。我的功能代码也可以在这里找到。 https://raw.githubusercontent.com/tonysdatamodels/netlogo.in.r/main/open%20netlogo%20in%20r