2012-08-07 102 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"))