2015-03-15 8 views
5

Próbuję wywołać metodę w klasie java z rJava na kilka dni i jeszcze nie zrozumiałem, co robię źle. Może ktoś tutaj będzie miał dla mnie jakieś wskazówki.rJava - .jcall wywołanie wydania: metoda z podpisem nie znaleziono

Sytuacja wygląda następująco:

  1. załadować bibliotekę i inicjowania obiektu (to działa dobrze):

    library(rJava) 
    .jinit('C:/javatemp/worker.jar') 
    jobject <- .jnew("worker.concrete") 
    
  2. Wymienię metod i mam drobny wynik:

    .jmethods(jobject) 
    > [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)" 
    
  3. Przygotowuję strukturę wejściową, która działa również dobrze:

    word <- .jnew("java/lang/String", "a word") 
    input = .jcast(word, "java/lang/CharSequence", check = TRUE) 
    
  4. Jednak gdy próbuję wykonać metodę pojawia się błąd, że taka metoda nie istnieje ...

    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 
    

Czy ktoś ma pomysł jak nazwać taką metodę ?

Odpowiedz

6

Przepraszam za odpowiedź na stare pytanie, ale przez pewien czas też mnie to dręczyło. Odpowiedź jest następująca: ;

Format specyfikacji typów dla niepopularnych typów zwrotu to Lpackage/subpackage/Type; - musi być zakończony średnikiem. W powyższym przykładzie potrzebujesz:

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

Wow, to nie było oczywiste. Nie znaleziono wyraźnej dokumentacji. Zajęło mi to trochę czasu. Dzięki. – Alok

+0

Teraz to ";" odpowiedź musi przejść do dokumentacji rJava. Dzięki, Martin. – Vortex