С вашим классом (хорошая идея иметь пакет)
package mypackage;
public class Processor {
public String showMsg(String msg) {
return "The message is : " + msg;
}
public static void main(String [] arg) {
Processor pro = new Processor();
System.out.println(pro.showMsg(arg[0]));
}
}
хранится в файле src/mypackage/Processor
делать следующее
> mkdir target
> javac -d target src/mypackage/Processor.java
> export CLASSPATH=`pwd`/target
> R
тогда, внутри R, сделай следующее
testJav <- function(){
library(rJava)
.jinit()
obj <- .jnew("mypackage/Processor")
xx <- .jcall(obj, returnSig="Ljava/lang/String;", method="showMsg", "Say hi to her")
}
как только у вас все будет на месте, вот что вы получите
> export CLASSPATH=`pwd`/target
> R
...
...
...
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(rJava)
> .jinit()
> obj <- .jnew("mypackage/Processor")
> xx <- .jcall(obj, returnSig="Ljava/lang/String;", method="showMsg", "Say hi to her")
> xx
[1] "The message is : Say hi to her"
>
Веселитесь с R
и JNI
:)
Забавный факт
Знаете ли вы, что javap
очень полезно, когда дело доходит до получения подписи метода?
> javap -s mypackage/Processor
Compiled from "Processor.java"
public class mypackage.Processor {
public mypackage.Processor();
descriptor: ()V
public java.lang.String showMsg(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/String;
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
}