2015-03-15 14 views
5

Sto provando a chiamare un metodo nella classe java con rJava per alcuni giorni e non ho ancora capito cosa sto facendo male. Forse qualcuno qui avrà qualche indizio per me.rJava - .jcall problema di chiamata: metodo con firma non trovata

La situazione si presenta così:

  1. ho caricare la libreria e l'inizializzazione di un oggetto (che è funziona bene):

    library(rJava) 
    .jinit('C:/javatemp/worker.jar') 
    jobject <- .jnew("worker.concrete") 
    
  2. Ne elenco metodi e ottengo risultato bene:

    .jmethods(jobject) 
    > [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)" 
    
  3. Sto preparando la struttura di input che funziona anche bene:

    word <- .jnew("java/lang/String", "a word") 
    input = .jcast(word, "java/lang/CharSequence", check = TRUE) 
    
  4. Tuttavia quando sto provando ad eseguire il metodo ottengo un errore che tale metodo non esiste ...

    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 
    

Qualcuno ha un'idea di come chiamare tale metodo ?

risposta

6

Ci scusiamo per aver risposto a una vecchia domanda, ma questo mi ha infastidito anche per un po 'di tempo. La risposta è: ;

Il formato della specifica del tipo per i tipi di ritorno non primitivi è Lpackage/subpackage/Type; - deve terminare con un punto e virgola. Quindi nell'esempio sopra, avresti bisogno di:

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

wow, questo non era ovvio. Non ho trovato la documentazione esplicita. Ci è voluto un po 'anche per me. Grazie. – Alok

+0

Ora, questo ";" la risposta deve andare nella documentazione di rJava. Grazie Martin. – Vortex

Problemi correlati