Autor Thema: LS Java-Method aufrufen  (Gelesen 3296 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
LS Java-Method aufrufen
« am: 04.02.09 - 16:31:46 »
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?!
Code
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.
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: LS Java-Method aufrufen
« Antwort #1 am: 04.02.09 - 16:42:32 »
...hier mal noch ne andere Syntax, lt. Hilfe, die doch eigentlich korrekt wäre?!
Code
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.
Lotus Notes 8.0.2

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: LS Java-Method aufrufen
« Antwort #2 am: 05.02.09 - 07:48:52 »
Hallo,

hier ein Musteraufruf aus einem meiner Scripte:

' Javaverbindung aufbauen
Set jsession = New JavaSession()                              
' Javasession starten
' Klasse laden
Set Crc32Class = jsession.GetClass("JavaCRC32")   

' Instanz mit aktueller Datei (String) erzeugen
Set Crc32Object = Crc32Class.CreateObject("(Ljava/lang/String;)V", Datei)

' weiteren Parameter setzen
sCrc32.setTyp("1")   

' Rückgabewert lesen
sCrc32 = Crc32Object.getCrc32()

Ich hoffe das hilft !

Gruß

André

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: LS Java-Method aufrufen
« Antwort #3 am: 05.02.09 - 08:55:15 »
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!  ;)
Code
'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.
Lotus Notes 8.0.2

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: LS Java-Method aufrufen
« Antwort #4 am: 05.02.09 - 13:01:07 »
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.

Code
neuePostNr = myObject(myMethodInputStringVariable)
statt
Code
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.

Code
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).
« Letzte Änderung: 05.02.09 - 13:04:32 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz