2013-12-10 65 views
0

我想用R将参数输入到Java中,例如“1000”。然后StringToNum进程的方法并输出它的返回值R,即1000.似乎它是.jcall()的工作,但我不知道如何处理它的参数。因为我不知道Java,请你帮我一下吗? 非常感谢!package rjava jcall error in R

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

请看看http://stackoverflow.com/questions/18656732/rjava-jcall-return-type-issue/18656827#18656827我觉得问题是,那'main'是一个静态方法,不应该在对象引用上调用,而应该在类本身上调用。另请参阅'J'的rJava文档。 – Beasterfield

+0

谢谢Beasterfield!感谢您的帮助! – Bylon

+0

还是困惑。那我该怎么办?改变一个功能或只是改变参数? – Bylon

回答

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 
+0

非常感谢你:) – Bylon