0

R を使用して、「1000」などのパラメータを Java に入力したいと考えています。次に、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
4

1 に答える 1

0

2 つの問題があります。Java 側では、存在しないmainコンストラクターを呼び出します。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 パッケージの低レベル関数 (a で始まる) の呼び出しも避ける必要があります。したがって、rJava .jcall return type issueに示されているように、適切な呼び出しは次のようになります。

J("com.mingdong.rcalljava.test.StringToNum")$main( "1000" ) # untested
于 2013-12-10T09:34:14.533 に答える