我目前正在开发一个R包来集成R中的Java代码。但是,我在尝试正确调用java类方法时遇到了问题。到目前为止,我已经独立开发并编译了一个java程序到一个类文件中,然后将其打包为一个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
答案 0 :(得分:1)
我已经解决了这个问题,这里的关键是使用
mailReader = .jnew("mailReader")
调用,以便R在
中进行调用之前可以访问此类z = .jcall(mailReader, "S", etc....)
默认情况下,R可以访问静态java方法。