2013-02-16 101 views
1

當我嘗試使用功能NLStart()啓動從RStudio的GUI的NetLogo,我得到的消息有關Java和GUI不開放。我使用Win 7 64位,NetLogo 5.0.3,R 2.15.1和R studio 0.96.304。
這裏是R代碼...RNetLogo功能NLStart無法啓動GUI

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> 

這是怎麼回事?任何解決方案或線索將不勝感激。 在此先感謝

+0

1首先檢查rJava正在'庫(rJava)'2 - 改變工作目錄到已安裝RNetLogo('setwd(..)'),並嘗試像'NLStart(getwd())' – agstudy 2013-02-16 23:29:19

+0

我確定rJava是最新的,並且在加載RNetLogo之前加載並確保工作目錄被設置爲NetLogo,但仍然沒有改變。有沒有其他測試我應該運行以確保它正常工作?順便說一下,我正在運行Java 7.0.130,如果這是相關的。 – npell 2013-02-17 02:34:32

+0

當我輸入'system('java -version')'java version「1.7.0_10」時,你的版本是最近的。 RNetLogo適合我... – agstudy 2013-02-17 04:25:35

回答

2

首先,請安裝R-Forge的RNetLogo(0.9.6)的最新版本,請參閱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. 您也可以嘗試先從JVM之前執行

    Sys.setenv(NOAWT = 0)

    .jinit()

    或之前加載rJava包。但我不是很樂觀,因爲調用

    .jcall( 「爪哇/郎/系統」, 「S」, 「的getProperty」, 「java.awt.headless」)

    不應導致正如你所報告的,HeadlessException。這對我來說看起來很奇怪。 如果您在沒有RStudio的情況下完成所有這些工作(也來自以前的答案),會發生什麼情況?

  2. 是否可以安裝並打開JGR(用於提供基於Java的R環境的R包,請參見http://cran.r-project.org/web/packages/JGR/index.html)?如果是這樣,嘗試從那裏啓動RNetLogo。

祝你好運!

+0

謝謝, 1月,我安裝了Oracle Java 1.7.0_05。 – npell 2013-02-18 20:41:57

+0

我在RStudio之外打開R,然後從那裏使用NLStart()成功啓動NetLogo。再次感謝。 – npell 2013-02-18 20:47:24

+0

我遇到了同樣的問題,在RStudio之外打開它,也沒有通過執行Jan建議的任何事情來解決問題。 – Kenji 2014-11-18 07:35:57

1

在這聽起來像一個Java問題乍看之下,但我不知道。之前從未看到過這個錯誤。

您使用的是哪種Java發行版(OpenJDK,Sun JRE,Sun JDK ...)? 您安裝了哪個版本的RNetLogo?

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

你的錯誤拋出線108,其中RNetLogo試圖打開的JOptionPane報告的NetLogo加載過程中happend錯誤。所以,這個問題目前是你的Java缺少GUI支持。這也可能是NetLogo未啓動的根本問題,但它也可能是不同的。

我的第一個建議是,你要麼安裝了Java的輕量級版本沒有GUI庫或將其配置爲不使用這些庫。

於是,開始了第一次測試: 打開一個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") 

+0

> z < - installed.packages() > z [「RNetLogo」,「Version」] [1]「0.9.5」 > library(rJava) > .jinit () [1] 0 > .jnew(「java/awt/Point」,10L,10L) [1]「Java-Object {java.awt.Point [x = 10,y = 10]}」 >˚F< - .jnew(的 「java/AWT /幀」, 「你好」) 錯誤.jnew(的 「java/AWT /幀」, 「你好」):java.awt.HeadlessException異常 – npell 2013-02-18 04:54:54

+0

> .jcall(「java的/ lang/System「,」S「,」getProperty「,」java.vm.version「) .jcall錯誤(」java/lang/System「,」S「,」getProperty「,」java.vm.version 「): java.awt.HeadlessException – npell 2013-02-18 04:58:32

+0

> .jcall(」java/lang/System「,」S「,」getProperty「,」java.vm.name 「) [1] 」的Java的HotSpot(TM)64位服務器VM「 – npell 2013-02-18 04:58:48