2013-12-10 59 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