我想使用R在Java中输入参数,例如“1000”。然后StringToNum的方法处理并输出它返回R,即1000.似乎它是.jcall()的工作,但我不知道如何处理它的参数。因为我不懂Java,你能帮帮我吗? 非常感谢你!
Java代码
package com.mingdong.rcalljava.test;
import java.io.PrintStream;
public class StringToNum
{
private String inputString = null;
public StringToNum(String inputString)
{
this.inputString = inputString;
}
public StringToNum()
{
}
public int convertStringToInt()
{
if (this.inputString == null) {
this.inputString = "100";
}
return Integer.valueOf(this.inputString).intValue();
}
public static void main(String[] args)
{
StringToNum stringToNum = new StringToNum();
int num = stringToNum.convertStringToInt();
System.out.println("num:" + num);
}
}
R代码
library(rJava)
.jinit()
.jinit('D:/Eclipse/dailyjob/javaProject/TestRCallJava.jar')
## .jaddClassPath("D:\\Eclipse\\dailyjob\\javaProject\\TestRCallJava.jar")
inputString <- .jnew("java.lang.String","1000")
inputString %instanceof% "java.lang.String"
StringToNum <- .jnew("com.mingdong.rcalljava.test.StringToNum")
StringToNum %instanceof% "com.mingdong.rcalljava.test.StringToNum"
.jcall(StringToNum,returnSig= "V", "main",inputString )
Error in .jcall(StringToNum, returnSig = "V", "main") :
method main with signature ()V not found
答案 0 :(得分:0)
有两个问题。在main
中的Java端,您调用不存在的构造函数new StringToNum()
。主要方法应该是:
public static void main( String[] args ) {
StringToNum stringToNum = new StringToNum( args[0] );
int num = stringToNum.convertStringToInt();
System.out.println("num:" + num);
}
也许这解决了你的问题。但是,通常在Java中调用静态方法而不是在对象上调用静态方法。如果您从Java调用main
方法,则必须调用
StringToNum.main( "1000" );
而不是打电话
StringToNum obj = new StringToNum( "" );
obj.main( "1000" );
您还应该避免调用rJava包的低级函数(以.
开头指示)。因此,如rJava .jcall return type issue中所示,正确的呼叫将是
J("com.mingdong.rcalljava.test.StringToNum")$main( "1000" ) # untested