Hi,
ich will mittels LS bzw. LS2J einen Konstruktor einer Klasse und direkt im Anschluß eine Java-Methode dieser Klasse aufrufen.
Ich werd echt noch blöd - es klappt nicht. Ich hab die Hilfe hoch und runter gelesen und die LS-Syntax zig-fach geändert...
Irgendwie hab ich ein Syntaxproblem im LS und sehe es mittlerweile nicht mehr?!
Set jSession = New JavaSession()
'Klasse
Set myClass = jSession.GetClass("de/ibees/notes/addin/NotesAddIn")
'Konstruktor (hat 1 String-Input Parameter)
Set myObject = myClass.CreateObject("(Ljava/lang/String;)V",myKonstruktorInputString)
'Methode (hat 1 String-Input und 1 String-Output Parameter)
Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")
'Methode ausführen + Rückgabewert
Dim neuePostNr As String
neuePostNr = myMethod.Invoke(,myMethodInputString)
Ich erhalte als Fehler "LS2J Error: Invoke needs JavaObject parameter to call an instance method. createPost"!
Klar, denn ich bringe das JavaObject 'myObject' hier nicht ins Spiel.
Doch wie ich auch die Hilfebeispiele implementiere (verschiedenste Syntaxen schon probiert), ich kann einfach nicht meine Methode aufrufen (ständig kommen, je nach Implementierung, andere Meldungen)!
Wie geht ihr denn vor, um:
1. Konstruktor zu initialisieren (JavaObject) inkl. Parameterübergabe
2. eine Methode, nach Konstrukor-Init, mit Input- und Output-Parametern im Anschluß aufzurufen?
Danke und Gruß
Rico.
...hier mal noch ne andere Syntax, lt. Hilfe, die doch eigentlich korrekt wäre?!
Set jSession = New JavaSession()
'Klasse
Set myClass = jSession.GetClass("de/ibees/notes/addin/NotesAddIn")
'Konstruktor (hat 1 String-Input Parameter)
Set myObject = myClass.CreateObject("(Ljava/lang/String;)V",myKonstruktorInputString)
'Methode (hat 1 String-Input und 1 String-Output Parameter)
Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")
'Methode ausführen + Rückgabewert
Dim neuePostNr As String
'neuePostNr = myMethod.Invoke(,myMethodInputString)
neuePostNr = myObject.myMethod(myMethodInputString)
Meldung: "Instance member MYMETHOD does not exist"! Klappt auch nicht... es ist zum piepen.
So, ich hab´s gelöst! Ich kann nun erfolgreich meine Methode aufrufen und deren Rückgabewert verarbeiten! Man muss eben nur mal drüber reden... dann hats klick gemacht! ;)
'Input-Parameter für Konstruktor
Dim myKonstruktorInputString As String
myKonstruktorInputString = "eingabeWert"
'Input-Parameter für Methode
Dim myMethodInputStringVariable As String
myMethodInputStringVariable = "einWert"
Set jSession = New JavaSession()
'Klasse
Set myClass = jSession.GetClass("de/ibees/notes/addin/NotesAddIn")
'Konstruktor (hat 1 String-Input Parameter)
Set myObject = myClass.CreateObject("(Ljava/lang/String;)V",myKonstruktorInputString)
'Methode (hat 1 String-Input und 1 String-Output Parameter)
Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")
'Methode ausführen + Rückgabewert speichern
Dim neuePostNr As String
neuePostNr = myMethod.Invoke(myObject,myMethodInputStringVariable)
Danke und Gruß
Rico.
Wieso rufst du eigentlich Methoden mit dieser - ich nenn das mal - Introspection-Syntax auf.
Bei einfachen Datentypen würde doch ein einfacher Aufruf genügen, oder etwa nicht.
neuePostNr = myObject(myMethodInputStringVariable)
statt
Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")
neuePostNr = myMethod.Invoke(myObject,myMethodInputStringVariable)
Ich nehm immer einen leeren Konstruktor für die Java Klasse und setz die Properties mit einfachen Methodenaufrufen. Solange man Strings, java.util.Date oder Primitivtypen (int, double und sowas) übergeben muss, ist das völlig ausreichend und einfacher zu schreiben.
Set myObject = myClass.CreateObject();
myObject.init(myKonstruktorInputString);
Dafür besitzt die Klasse de/ibees/notes/addin/NotesAddIn.java einen leeren Konstruktor und der code, der jetzt im Konstruktor ist, befindet sich in einer Methode public void init (String).