2011-03-08 55 views
4

我目前正在開發一個R包來在R中集成Java代碼。但是,我遇到了嘗試正確調用java類方法的問題。到目前爲止,我已經獨立開發並編譯了一個Java程序到一個類文件中,然後將其打包爲一個jar文件。我的代碼樣本如下:rjava .jcall問題

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(「郵件閱讀器」),它列出了所有可用的方法:到

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

所以,我在如何進行正確調用傳遞兩個參數(用戶名,密碼)很失落java類文件。

有什麼想法?在此先感謝,

P

回答

1

我已經解決了這個問題,這裏的關鍵是使用

mailReader = .jnew("mailReader") 

呼叫使R具有在

撥打電話之前訪問這個類
z = .jcall(mailReader, "S", etc....) 

默認情況下,R有權訪問靜態java方法。