Domino 9 und frühere Versionen > ND6: Entwicklung
Speicher wieder freigeben nach JavaAgent
rbo:
Hallo zusammen,
ich schreibe momentan gerade einen relativ mächtigen Dialog in Java, der nachher unter Notes 6 aus einer DB heraus clientseitig aufgerufen werden soll. Dummerweise belegt das Ding 36 KB virtuellen Speicher und ich habe keine Ahnung wie ich dieses Speicher nach Beendigung des Dialoges wieder freigeben kann. Der Dialog wird geschlossen über
JFrame.dispose();
da
System.exit(0);
ja nicht funktioniert. Aus einer Standalone Applikation klappt das auch alles wunderbar, nur aus Notes heraus wird der belegte Speicher nach Beendigung nicht weniger.
Hat jemand ne idea?? Wäre für jeden Tipp dankbar.
MfG, René
Marinero Atlántico:
Bist du ganz sicher, dass der Agent wirklich terminiert?
Damit du überhaupt eine GUI in einem Agenten erzeugen kannst, musst du den Agenten ja in einer Art Endlosschleife halten.
Ich dachte, dass würde wieder freigegeben, sobald der Agent terminiert.
Kannst du vielleicht mal den code des Agenten posten (ohne den GUI-code) ?
Axel
rbo:
Hi,
erstmal einen Dank für deine schnelle Antwort.
Aber nein, ich bin mir eben nicht sicher ob der Agent wirklich terminiert.
Der Dialog wird folgendermaßen aufgerufen:
import lotus.domino.*;
import de.timetoact.xmleditor.gui.MainFrame;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
View view = db.getView("LookXMLs");
DocumentCollection col = agentContext.getUnprocessedDocuments();
Document xml = col.getFirstDocument();
Document dtd = view.getDocumentByKey("test.dtd");
//MainFrame = erweiterte JFrame
MainFrame f = new MainFrame(xml,dtd);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Der MainFrame-Klasse habe ich nen WindowAdapter hinzugefügt, die beim Schliessen, sprich beim Klicken auf das "X" rechts oben, die Methode
dispose();
auf dem MainFrame-Object ausführt. Diese Methode sorgt dafür, dass der Dialog zugeht und als Standalone Applikation auch aus dem Speicher verschwindet.
Gruß René
Marinero Atlántico:
Interessantes Problem. Java in Notes ist wirklich ein bischen Geisterbahn.
--- Zitat von: rbo am 21.02.05 - 15:09:32 ---
Aber nein, ich bin mir eben nicht sicher ob der Agent wirklich terminiert.
--- Ende Zitat ---
der Agent terminiert, MainFrame wird aber nicht garbageCollected.
Garbage Collection kann man nicht erzwingen.
Versuch mal so:
--- Code: ---import lotus.domino.*;
import de.timetoact.xmleditor.gui.MainFrame;
public class JavaAgent extends AgentBase {
public static boolean stayingAlive = true;
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
View view = db.getView("LookXMLs");
DocumentCollection col = agentContext.getUnprocessedDocuments();
Document xml = col.getFirstDocument();
Document dtd = view.getDocumentByKey("test.dtd");
//MainFrame = erweiterte JFrame
MainFrame f = new MainFrame(xml,dtd);
while (stayingAlive) { }
f = null;
dtd.recycle();
xml.recycle();
col.recycle();
session.recycle();
} catch(Exception e) {
e.printStackTrace();
}
}
}
--- Ende Code ---
In dem WindowsAdapter dann die Zeile:
--- Code: ---JavaAgent.stayingAlive = false;
--- Ende Code ---
rbo:
hmm, die idea ansich ist garnet mal schlecht. leider ist mir ne korrekte umsetzung noch net gelungen. mit der übergabe der objekte scheint noch irgendwas schiefzulaufen, das versuche ich aber morgen zu beheben. werde dann nochmal ne rückmeldung geben obs tatsächlich funktioniert.
bis denne, René
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln