5

現在、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 クラス ファイルに 2 つの引数 (ユーザー名、パスワード) を渡す適切な呼び出しを行う方法がわかりません。

何かご意見は?前もって感謝します、

P

4

1 に答える 1

1

私はこの問題を解決しました。ここで重要なのは、

mailReader =    .jnew("mailReader")

呼び出しを行う前に、R がこのクラスにアクセスできるように呼び出します。

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

デフォルトでは、R は静的 Java メソッドにアクセスできます。

于 2011-03-08T20:11:30.330 に答える