【问题标题】:rJava - method with signature not foundrJava - 找不到签名的方法
【发布时间】:2017-05-31 11:16:36
【问题描述】:

我的问题与one 类似: 即使添加分号对我不起作用,这是我调用 .jmethod 为我显示它时的方法:

[10]“公共 java.util.Set utils.Rinterface.getPhones()”

当我调用方法时,像这样

rJava::.jcall(rinterface,"Ljava.util.Set;","getPhones")

我收到了这个错误:

rJava::.jcall(rinterface, "Ljava.util.Set;", "getPhones") : 方法 带签名的getPhones ()Ljava.util.Set;没有发现它给出了 错误,还不知道怎么回事?!

【问题讨论】:

    标签: java r java-native-interface rjava r-package


    【解决方案1】:

    您可以尝试使用此示例树结构:

    .
    └── utils
        └── Rinterface.java
    

    还有超级简单的类

    package utils;
    
    import java.util.Set;
    
    public class Rinterface {
        public java.util.Set getPhones() {
            return new java.util.HashSet();
        }
    }
    

    确保使用与 rJava 相同的 Java 版本进行编译。

    设置 Java 环境

    library(rJava)
    .jinit()
    # note that you have to point to place where utils directory is
    .jaddClassPath(dir("place_where_your_package_is",full.names=TRUE))
    obj <- .jnew("utils.Rinterface")
    # call method
    result=.jcall(obj, returnSig="Ljava/util/Set;", method="getPhones")
    

    你总是可以得到方法的签名

    Compiled from "Rinterface.java"
    public class utils.Rinterface {
      public utils.Rinterface();
        descriptor: ()V
    
      public java.util.Set getPhones();
        descriptor: ()Ljava/util/Set;
    }
    

    就我而言,它按预期工作。

    更新:

    在你的情况下,你使用:

    Ljava.util.Set;

    替换为

    Ljava/util/Set;

    更新:

    更新以反映正确的包布局

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 2023-03-04
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多