rJava - .jcall调用问题:未找到签名的方法

时间:2015-03-15 21:36:34

标签: r rjava

我试图用rJava在java类中调用一个方法几天,我还没弄清楚我做错了什么。也许这里有人会为我提供一些线索。

情况如下:

  1. 我加载库并初始化一个对象(这样可以正常工作):

    library(rJava)
    .jinit('C:/javatemp/worker.jar') 
    jobject <- .jnew("worker.concrete")
    
  2. 我列出方法,结果很好:

    .jmethods(jobject)
    >  [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)"  
    
  3. 我正在准备输入结构,它也可以正常工作:

    word <- .jnew("java/lang/String", "a word")
    input = .jcast(word, "java/lang/CharSequence", check = TRUE)
    
  4. 但是当我尝试执行该方法时,我得到一个错误,即此方法不存在...

    out = .jcall(jobject,"Ljava/util/List","lookup",input)
    > Error in .jcall(jobject, "Ljava/util/List", "lookup", input) : 
    method lookup with signature (Ljava/lang/CharSequence;)Ljava/util/List not found
    
  5. 有没有人知道如何调用这种方法?

1 个答案:

答案 0 :(得分:8)

很抱歉回答了一个老问题,但这也困扰了我一段时间。答案是:;

非原始返回类型的类型规范格式为Lpackage/subpackage/Type; - 它必须以分号结尾。因此,在上面的示例中,您需要:

out = .jcall(jobject,"Ljava/util/List;","lookup",input)