2016-10-07 11 views
0

Rと一緒に作業しているJavaコードを使用している人は誰ですか?私は "RJAVA"パッケージでRからJavaコードを呼び出すことを意味します。クラスのJavaオブジェクトをRに(rjavaパッケージで)返す方法

私は自分のパッケージを作成し、そこにはJavaコードのjarファイルがあります。 (のようにhttps://cran.r-project.org/web/packages/helloJavaWorld/vignettes/helloJavaWorld.pdf

私は.rファイルがあり、私はJavaメソッドを呼び出したい。 問題は "クラスのJavaオブジェクト"を返すときです。整数として "I"、文字列として "S"に問題はありません。私はそれで作業を続行するにはRのクラスのJavaオブジェクトが必要です。可能です?私は戻り値 "L"(例えば、 "Ljava/lang/Object")のJava Objectを返すことができますが、動作しません。

これは、Javaコードを呼び出すための私のRコード:

FCA <- function(){ 

    a <- .jnew("fcamp/test/MainTest") 
    b <- .jcall(a, "S", "testFunction") 
    c <- .jcall(a, "Lfcamp/input/Context;", "testFunction2") 

    return(c) 
} 

これは私のエラーです:

Error in .jcall(a, "Lfcamp/input/Context;", "testFunction2") : 
method testFunction2 with signature()Lfcamp/input/Context; not found 

間違いがありますか? RのクラスのJavaオブジェクトを返すことが可能であり、そこでは引き続き作業しますか?ここで

+0

あなたの例は、パッケージパスが正しい場合、c < - .jcall(a、 "Lfcamp/input/Context;"、 "testFunction2")で動作するはずです。接頭辞に "L"を付け、接尾辞に ";"を付ける必要があります。フルクラス名 – tokiloutok

+0

私は "L"と ";"そこ。そして、それはまだ動作しません。正しいと確信できる場合は、間違ったJavaコードがある可能性があります。ありがとう。 –

答えて

1

は(私は完全に願っています)の例です:

私はJavaのクラスを持っている:

package hello; 

    public class Hello extends Object { 

     public String sayHello2(String name) { 
      String result = new String("Hello " + name); 
      return result; 
     } 

     public Hello sayHello3(String name) { 
      String result = new String("Hello " + name); 
      return new Hello(); 
     } 

    } 

sayHello3は、Helloオブジェクトを返します。私のRセッションで

java -cp . hello/Hello.java 
    jar cvf Hello.jar hello/Hello.class 

:なしJavaの参照とのコール

library(rJava) 
.jinit() 
.jaddClassPath(dir("path to jar", full.names=TRUE)) 
.jclassPath() # you should see your jar 
hjw <- .jnew("Hello")  # create instance of hell/Hello class 

outRef <- .jcall(hjw, "S", "sayHello2", "toto", evalString = FALSE) 
.jstrVal(outRef) 

[1] "Hello World" 

とJavaの参照を返す関数の呼び出し:

outRef2 <- .jcall(hjw, "Lhello/Hello;", "sayHello3", "Universe", evalString = T) 
.jstrVal(outRef2) 
outRef3 <- .jcall(outRef2, "S", "sayHello2", "New Universe", evalString = FALSE) 
.jstrVal(outRef3) 
jarファイルを作成するには

返品:

"[email protected]" 
"Hello New Universe" 
+0

ありがとうございます...それは私の多くを助けます! :)私はもう一つ質問があります。 "List "のようなjavaから戻ってくる必要がある場合はどうすればいいですか?リストの戻り値の型はありますか? –

関連する問題