Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: masseur81 am 14.03.08 - 17:15:36

Titel: LS2J Error: Null Java Object
Beitrag von: masseur81 am 14.03.08 - 17:15:36
Ich verwende in einer Script Library LS2J und binde damit eine weitere Java Library ein, bestehend aus einer Klasse.
Beim Aufruf einer Methode meiner Java-Klasse erhalte ich jedoch den Fehler: "LS2j Error: Null Java Object."

Testweise habe ich in der Java-Klasse auf die Konsole geschrieben, und er führt die Methode auch bis zum Schluss aus. Trotzdem läuft dann noch was schief. Es kann also an der Zuweisung des Rückgabewerts liegen.

Die Signatur der Methode ist (byte[], int, int, String) : byte[], oder in JNI "([BIILjava/lang/String;)[B".

Wo liegt da nun der Fehler?
Titel: Re: LS2J Error: Null Java Object
Beitrag von: masseur81 am 14.03.08 - 17:20:06
Hab mal den Rückgabewert auf void gesetzt, da funktioniert es. Welche Typen sind denn überhaupt erlaubt? Ist ne ganz schöne Einschränkung, weil ich damit ein Bild-Attachment in der Größe verändern möchte.
Titel: Re: LS2J Error: Null Java Object
Beitrag von: flaite am 14.03.08 - 18:17:58
Du kannst schon etwas herausbekommen.
Hab das gerade in der Hilfe gefunden:
Code
Set Variant = javamethod.Invoke([JavaObject [,Argument1...[, Argument12]])
Das Data Type Mapping wird in einem gleichnamigen Dokument der Notes Designer Hilfe beschrieben. Versuch einfach die Hilfe.
Aber brauchst du wirklich da komplexe Objekte herausholen, um die per LotusScript weiterzuverarbeiten.
Für Bild Attachment Größe doch wohl höchstens eher 2 Zahlenwerte? Die du zur Not auch in der Java Methode als String enkodieren könntest. Die eine Zahl vorne, die andere hinten und dazwischen ein Trennzeichen wie ~.
Ich würd aber das öffentliche Interface der LS2J Klasse - also alles auf was von LotusScript zugegriffen werden kann - immer möglichst EINFACH halten.
Titel: Re: LS2J Error: Null Java Object
Beitrag von: masseur81 am 16.03.08 - 08:19:49
Ich benötige Breite und Höhe, aber natrlich auch das Bild selbst. Und das liegt entweder als Byte-Array oder als NotesStream vor. Aber beides scheint nicht so recht zu funktionieren.
Titel: Re: LS2J Error: Null Java Object
Beitrag von: flaite am 17.03.08 - 09:03:45
Eine Möglichkeit wäre, das Bild im Java Code einfach temporär an einem Ort auf der Platte speichern und den Ort zurückgeben.
Dann könntest du einfach einen String zurückgeben: <int_höhe>~<int_breite>~<datei_name>
Ich glaub mit hoher Sicherheit nicht, dass in LS2J eine automatische Konvertierung zwischen Streams in Java und in LotusScript angeboten wird.
Titel: Re: LS2J Error: Null Java Object
Beitrag von: masseur81 am 17.03.08 - 09:12:58
Diese Varianten hab ich alle schon durch. Dann entsteht ein Rechteproblem, der Benutzer erhält einen hässlichen Dialog, bei dem er bestätigen muss, ob er den Festplattenzugriff überhaupt möchte.
Ich habe auch schon den Rückgabewert von byte[] in String geändert, aber dabei bekomm ich entweder kein korrektes Bildformat in mein Dokument, oder Notes stürzt beim Aufruf per LS2J einfach ab.

Eine Hürde könnte ich sicher noch nehmen, aber irgendwie führt jeder Umweg in eine Sackgasse. Momentan probier ich es über einen Java-Agenten, der aufgerufen wird. Ist sicher nicht der schönste Weg, Aufrufparameter im Dokument abzulegen, aber mittlerweile möcht ich nicht mehr so sehr, dass es schön ist, sondern dass es (unauffällig und ohne Probleme) funktioniert.