【问题标题】:package rjava jcall error in RR中的包rjava jcall错误
【发布时间】:2013-12-10 08:15:58
【问题描述】:

我想用 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

【问题讨论】:

  • 请看一下stackoverflow.com/questions/18656732/… 我认为问题在于,main 是一个静态方法,不应在对象引用上调用,而应在类本身上调用。另请参阅J 的 rJava 文档。
  • 谢谢比斯特菲尔德!感谢您的帮助!
  • 还是一头雾水。那我该怎么办呢?改变一个函数或只是改变参数?

标签: java r rjava


【解决方案1】:

有两个问题。在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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2012-07-03
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多