2

当我尝试使用函数 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>

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

4

3 回答 3

2

首先,请安装最新版本的 RNetLogo (0.9.6),可从 R-Forge 获得,请参见此处http://rnetlogo.r-forge.r-project.org/(“如何获取”部分)。但这不会解决您的问题,因为我们看到这不是 RNetLogo 问题,而是 rJava 已经出现的问题。似乎您的 Java/配置有问题(不支持视觉显示 --> 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(提供基于 Java 的 R 环境的 R 包,请参阅http://cran.r-project.org/web/packages/JGR/index.html)?如果是这样,请尝试从那里启动 RNetLogo。

祝你好运!

于 2013-02-18T08:22:08.937 回答
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")

?

于 2013-02-17T19:31:27.587 回答
1

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

于 2021-08-05T11:36:53.177 回答