2012-08-07 76 views
0

我剛剛開始與rJava一起使用基於R的應用程序中的大量Java代碼。我已經嘗試了一些簡單的「Hello world」類型的東西,所以我知道基本設置正在工作。我有幾個問題,但我希望如果我可以使用.jcall解決這個基本問題,他們將得到解決。在.jcall中傳遞參數

> cal = new(J("java/util/GregorianCalendar")) 
> obj = new(J("au.gov.ips.dataarchive.TIndex")) 
> obj$monthlyT(cal) 
[1] 77 
> .jcall(obj,"I","monthlyT",cal) 
    Error in .jcall(obj, "I", "monthlyT", cal) : 
    method monthlyT with signature (Ljava/util/GregorianCalendar;)I not found 

據我的理解,第3行和第4行是等效的,應該產生相同的結果。顯然我做錯了什麼。該「monthlyT」方法是在Java代碼中定義爲:

static public Integer monthlyT(Calendar month) 

我不是一個Java專家,所以請讓我知道我可能需要其他什麼信息對Java對象提供來回答這個問題。

+0

「我」是一個int返回類型。你正在返回java.lang.Integer。 .jcall對這些事情很自私。 – 2012-08-07 02:24:27

+0

謝謝。你能詳細談談?我現在試過.jcall(obj,「Ljava/lang/Integer;」,「monthlyT」,cal),但沒有成功。這裏需要的確切語法是什麼? – Bogdanovist 2012-08-07 02:37:08

回答

1

caljava.util.GregorianCalendar而不是java.util.Calendar。如果你想使用低層次的接口(爲什麼?),那麼你需要自己來鑄造。因此,像這樣:

.jcall(obj,"I","monthlyT",.jcast(cal, "java/util/Calendar"))