2015-03-15 2 views
5

Я пытаюсь вызвать метод в классе java с rJava в течение нескольких дней, и я еще не понял, что я делаю неправильно. Может быть, у кого-то здесь будут какие-то подсказки.rJava - .jcall вызывающая проблема: метод с сигнатурой не найден

Ситуация выглядит следующим образом:

  1. загружает библиотеку и инициализация объекта (это работает отлично):

    library(rJava) 
    .jinit('C:/javatemp/worker.jar') 
    jobject <- .jnew("worker.concrete") 
    
  2. Я Перечислим методы и я получаю прекрасный результат:

    .jmethods(jobject) 
    > [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)" 
    
  3. Я готовлю структуру ввода, которая также отлично работает:

    word <- .jnew("java/lang/String", "a word") 
    input = .jcast(word, "java/lang/CharSequence", check = TRUE) 
    
  4. Однако, когда я пытаюсь выполнить метод, я получаю ошибку, что такой метод не существует ...

    out = .jcall(jobject,"Ljava/util/List","lookup",input) 
    > Error in .jcall(jobject, "Ljava/util/List", "lookup", input) : 
    method lookup with signature (Ljava/lang/CharSequence;)Ljava/util/List not found 
    

Кто-нибудь есть идеи, как назвать такой метод ?

ответ

6

Извините, что ответили на старый вопрос, но это некоторое время прослушивало и меня. Ответ: ;

Формат спецификации типа для не примитивных типов возврата - Lpackage/subpackage/Type; - он должен заканчиваться точкой с запятой. Поэтому в приведенном выше примере вам понадобится:

out = .jcall(jobject,"Ljava/util/List;","lookup",input) 
+0

ничего себе, это было не очевидно. Не удалось найти документацию в явном виде. Взял время и для меня. Благодарю. – Alok

+0

Теперь этот «;» ответ должен войти в документацию rJava. Спасибо Мартину. – Vortex

Смежные вопросы