【问题标题】:rjava .jcall issuerjava .jcall 问题
【发布时间】:2011-03-08 05:35:34
【问题描述】:

我目前正在开发一个 R 包以将 Java 代码集成到 R 中。但是,我在尝试正确调用 Java 类方法时遇到了问题。到目前为止,我已经独立开发了一个java程序,编译成class文件,然后打包成jar文件。我的代码示例如下:

library(rJava)

.jinit()

.onLoad <- function(lib, pkg) {
    pathToSdk <- paste(system.file(package = "mailViz") , "C:\\path\\to\\libs", sep="")

    jarPaths <- c(paste(pathToSdk, "mail.jar", sep=""),
            paste(pathToSdk, "mailReader.jar", sep="")
    )    
    .jpackage(pkg, morePaths=jarPaths)
    attach( javaImport( c("java.lang", "java.io", "java.mail", "java.util", "java.text")))
    packageStartupMessage( paste( "mailViz loaded. The classpath is: ", paste(.jclassPath(), collapse=" " ) ) )        
}


# get method arguments for the class
#.jmethods("mailReader","readEmailInfo")

z=.jcall("mailReader", "Ljava/lang/String;", "readEmailInfo", "username", "password")

但是,当我执行 .jcall 函数时,我收到一个错误:

Error in .jcall("mailReader", "Ljava/lang/String;", "readEmailInfo", "username",  : 
  method readEmailInfo with signature (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; not found

我尝试了多种更改参数的方法,但没有运气。当我在类文件上运行 .jmethods("mailReader") 时,它会列出所有可用的方法:

[2] "public java.lang.String mailReader.readEmailInfo(java.lang.String,java.lang.String)"  

所以,我迷失了如何正确调用将两个参数(用户名、密码)传递给 java 类文件。

有什么想法吗?提前致谢,

P

【问题讨论】:

    标签: r rjava


    【解决方案1】:

    我已经解决了这个问题,这里的关键是使用

    mailReader =    .jnew("mailReader")
    

    调用,以便 R 在调用之前可以访问这个类

    z = .jcall(mailReader, "S", etc....)  
    

    默认情况下,R 可以访问静态 java 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 2021-05-26
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多