【问题标题】:rJava .jnew java.lang.NoSuchMethodErrorrJava .jnew java.lang.NoSuchMethodError
【发布时间】:2018-07-03 10:21:17
【问题描述】:

我是 'rJava' 的新手,遇到了几个小时的麻烦。

library(rJava)
.jinit(classpath="C:\\Users\\XXX\\desktop\\example")
.jclassPath()
# [1] "C:\\Users\\XXX\\Documents\\R\\win-library\\3.5\\rJava\\java"          
# [2] "C:\\Users\\XXX\\desktop\\example" 
s=.jnew("java/lang/String", "Hello World")
.jcall(s, "I", "length")
# 11
.jcall('Exampletest', returnSig='I', method='test')
# 1
.jnew('Exampletest', 3)
# Error in .jnew("Exampletest", 3) : java.lang.NoSuchMethodError: <init>

这很奇怪,因为我已经成功调用了函数“test”,但仍然无法新建对象。

java代码在这里

public class Exampletest {

    static public int test() {
        return 1;
    }

    public Exampletest(int x) {
        this.x = x;
    }

    private int x;
}

任何想法都值得赞赏!

【问题讨论】:

    标签: java r rjava


    【解决方案1】:

    啊哈,我去年开始使用 rJava 时就遇到了这个问题。这个问题仅仅是因为在 r 中,3 是数字而不是整数。所以你应该使用3L而不是3

    顺便说一句,如果参数在 java 中具有 long 类型,3L 将无法再次工作。您应该再次使用.jlong(3) 而不是3L。函数的签名在 rJava 中非常重要!

    【讨论】:

    • 是的!改成 3L 解决了我的问题。我可以再问一个问题吗?我发现我更改了我的java代码并用javac重新编译后,R中的代码似乎是旧版本?因为代码结果没有变化
    • 嗯,这可能是因为 jvm 没有加载新的 .class 文件。你有没有尝试过再次使用.jinit
    • 尝试使用.rs.restartR()重新启动会话,这可以解决任何问题。或者你应该去查看文档,看看是否有重新加载.class文件的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多