Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: Loki am 01.02.13 - 14:29:48

Titel: Java Agent Probleme mit JFrame
Beitrag von: Loki am 01.02.13 - 14:29:48
Hallo liebe Atnotes User,

Ich möchte einen Agenten in Java schreiben, der unter anderem ein JFrame benutzt und habe dabei mehrere Probleme.

Problem 1:
Ich habe die Einsprungklasse&Methode die standardmäßig erzeugt wird, und erzeuge in ihr ein neues Objekt von einer selbstgeschriebenen Klasse, die JFrame erweitert. Dabei übergebe ich unter anderem den AgentContext. Im Konstruktor des JFrames ist der Kontext noch verfügbar (System.out.println(ac) zeigt mir != null). In einer Methode der Klasse, die bei einem Button-Aufruf ausgeführt wird ist der AgentContext jedoch leider wieder null.
Woran könnte das liegen?

Problem 2:
Da der Agent ein eigener Thread ist, und das JFrame nicht in ihm läuft, läuft der Agent schon ab, obwohl das JFrame noch nicht geschlossen wurde. Das kann ich nur kontrollieren, indem ich im Agenten folgenden Code einfüge, was ich persönlich blöd finde:

Code
while(!myframe.finished)
{
sleep(150);
}

Problem 3:
Ich möchte, dass nachdem der Anwender auf einen Button im JFrame geklickt hat ein neues Document (Form = "test") erstellt wird, welches dann im UI geöffnet wird, damit der Anwender es bearbeiten kann. Java kann jedoch leider nicht auf das UI zugreifen. Deshalb passiert das mit einem LotusScript Agenten ("test3"). Dieser sieht folgendermaßen aus:

Code
Sub Initialize
	
	Dim ses As New NotesSession
	Dim doc As NotesDocument
	Dim uiws As New NotesUIWorkspace
	
	
	Set doc = ses.Currentdatabase.Createdocument()
	Call doc.Replaceitemvalue("Form","test")
	Call uiws.Editdocument(True,doc)
	
	
End Sub

Dieser Agent funktioniert, wenn ich ihn aus einer View über einen Button ausführe.

Wenn in der View jedoch für den ersten (Java)Agenten ein Button ist, der nach einem Klick auf den Button im JFrame den Test3-Agenten ausführt, dann
öffnet sich zwar ein neues Document, das wird aber fehlerhaft im UI angezeigt. (Es sieht aus, als wäre die View auf die Form gescreenshottet). Ich kann das Document dann auch nicht speichern, oder mir seine Eigenschaften anschauen.

Problem 4:
Das ist nichts gravierendes.

Im JFrame wird im Konstruktor ein JButton erzeugt. Dieser wird mit setSize(100,100) auf 100x100 gesetzt und mit setLocation(200,200) an eine Position gesetzt. Trotzdem füllt mir der Button das gesamte JFrame aus. (Location 0,0 und Size 800,600)

Ich hoffe ich habe mich verständlich ausgedrückt. Falls es noch Fragen gibt, dann beantworte ich diese gerne.

Danke für die Hilfe und Gruß
Loki
Titel: Re: Java Agent Probleme mit JFrame
Beitrag von: Ralf_M_Petter am 04.02.13 - 14:05:58
Prinzipiell: Java Swing aus Notesagents funktioniert nicht vernünftig und die IBM wird dir Bugs in diesem Bereich nicht fixen. Ich weiß, von was ich spreche, da ich sehr viel mit Swing Dialogen in Notes gemacht habe und alles versucht habe von der IBM die Bugs gefixt zu bekommen. Ich habe sogar mal auf einer DNUG Veranstalung mit Entwicklern von Notes (Niklas Heidloff und Maureen Leeland) versucht eine Lösung für Probleme in diesem Bereich zu finden und wurde nur auf den neuen Standardclient verwiesen.

Bezüglich deinene Problemen müsste ich zuerst wissen, für welche Client Version du entwickelst.

Grüße

Ralf
Titel: Re: Java Agent Probleme mit JFrame
Beitrag von: Loki am 05.02.13 - 08:01:18
Ich entwickle für 8.5 Clients.

Das Problem mit dem Aufrufen des zweiten Agenten hat sich jedoch schon erledigt. Aus dem Backend kann man einfach kein Frontend aufrufen. So wurde es mir gesagt.

Wenn jedoch Java Swing so buggy ist, dann brauch ich das ja eh nicht weiter zu verfolgen.

Funktioniert nur Java Swing nicht? Heißt das, dass es mit AWT vielleicht besser klappt? Oder muss ich hier ganz auf GUI verzichten?
Titel: Re: Java Agent Probleme mit JFrame
Beitrag von: Ralf_M_Petter am 05.02.13 - 09:58:12
Was dir gesagt wurde, ist völliger Unsinn. Natürlich kann man vom Backend Agents aufrufen, die auf das Frontend  zugreifen. Es ist auch Unsinn, dass man von Java nicht auf das UI zugreifen kann. Sieh dir mal http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Notes_Client_Java_UI_APIs-v8.5.2 an. Dort sind die UI Funktionen von Java detailiert beschreiben. Als UI verwendest du unter Notes in Java am besten SWT/Jface. Das ist das UI Toolkit, dass Notes selber verwendet. Wobei am besten ist, wenn du deine Funktionalität nicht in Javaagents verpackst sondern als Eclipse Plugins in Lotus Notes deployest.

Wenn du konkrete Fragen hast, werde ich Sie gerne beantworten. Für eine generelle Einführung in RCP Entwicklung ist ein Forum eher nicht geeignet. Da wäre es sicher besser eine Schulung zu besuchen.

Grüße

Ralf