2015-03-15 11 views
5

Ich versuche, eine Methode in Java-Klasse mit rJava für ein paar Tage aufzurufen, und ich habe es noch nicht herausfinden, was ich falsch mache. Vielleicht hat jemand hier ein paar Hinweise für mich.rJava - .jcall Aufruf Problem: Methode mit Signatur nicht gefunden

Die Situation sieht wie folgt aus:

  1. ich laden eine Bibliothek und ein Objekt zu initialisieren (das funktioniert):

    library(rJava) 
    .jinit('C:/javatemp/worker.jar') 
    jobject <- .jnew("worker.concrete") 
    
  2. I Liste Methoden und ich bekomme gute Ergebnis:

    .jmethods(jobject) 
    > [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)" 
    
  3. Ich bereite Eingangsstruktur vor, die auch gut funktioniert:

    word <- .jnew("java/lang/String", "a word") 
    input = .jcast(word, "java/lang/CharSequence", check = TRUE) 
    
  4. aber wenn ich versuche, die Methode, die ich einen Fehler auszuführen, dass eine solche Methode nicht existiert ...

    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 
    

Hat jemand eine Idee, wie diese Methode aufrufen ?

Antwort

6

Sorry für die Beantwortung einer alten Frage, aber das hat mich seit einiger Zeit auch abgehört. Die Antwort lautet: ;

Das Format der Typspezifikation für nicht primitive Rückgabetypen ist Lpackage/subpackage/Type; - es muss mit einem Semikolon enden. Also im obigen Beispiel würden Sie benötigen:

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

wow, das war nicht offensichtlich. Ich habe die Dokumentation nicht explizit gefunden. Nahm auch eine Weile für mich. Vielen Dank. – Alok

+0

Nun, das ";" Antwort muss in die rJava Dokumentation gehen. Danke Martin. – Vortex

Verwandte Themen