Ich glaube ich verstehe das Problem jetzt.
Das NotesThread.sinitThread zieht ja nur für einen Thread. Wenn man einen Thread mit StermThread beendet, werden alle Objekte die in diesem Thread erzeugt worden sind beschädigt. Du musst deine Objekte die du cachen willst in einem Thread erzeugen, der weiterläuft. Während du im AWT Thread dann mit diesen Objekten arbeitest.
Habe das jetzt auch in der Hilfe gefunden:
When child objects are used on threads other than the parent, keep the parent thread alive until all child threads terminate. This is particularly important when using Domino Objects in AWT event handlers.
Ein Beispiel warum es bei mir funktioniert.
/*
* Test.java
*
* Created on 1. November 2002, 11:56
*/
package GuiComponents;
import lotus.domino.*;
import GuiComponents.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
*
* @author petter_r
*/
public class Test {
static JDialog dialog;
static NotesTablePanel ntds;
/** Creates a new instance of Test */
public Test() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
NotesThread.sinitThread();
Session session = NotesFactory.createSession();
Database cdb=session.getDatabase("","web.nsf");
Document doc=cdb.getDocumentByID("9BE");
ntds=new NotesTablePanel(session,cdb,doc,"Feld1g;Feld2;Feld3;Feld4","1;2;3;4","Feld1;Feld2;Feld3;Feld4","100");
dialog=new JDialog((Frame)null,"Test",true);
dialog.getContentPane().setLayout(new FlowLayout());
dialog.getContentPane().add(ntds,BorderLayout.CENTER);
JButton ok=new JButton("OK");
ok.setPreferredSize(new Dimension(100,25));
JButton abbrechen=new JButton("abbrechen");
abbrechen.setPreferredSize(new Dimension(100,25));
dialog.getContentPane().add(ok,BorderLayout.SOUTH);
dialog.getContentPane().add(abbrechen,BorderLayout.SOUTH);
dialog.pack();
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Ok wurde ausgewählt");
ntds.tableStopEditing();
dialog.dispose();
}
});
abbrechen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("abbrechen wurde ausgewählt");
dialog.dispose();
}
});
dialog.show();
doc.save(true,false);
System.out.println("disposed");
session.recycle();
} catch(Exception e) {
e.printStackTrace();
}
finally{
NotesThread.stermThread();
}
}
}
Schwierig ist natürlich dann wo man wenn man keinen gebundenen Dialog wie in meinem Fall hat die Notes Objekte wie Session, DB, view usw erstellt. Ich würde empfehlen einen eigenen Thread dafür zu machen, den mit NotesThread.sinitThread initialisieren, die Objekte erstellen. denn Thread dann schlafenlegen bis zu einer Unterbrechung und wenn Programm fertig die Unterbrechung des Threads machen, damit er Session recyceln kann und das NotesThreadStermthread machen kann. Was hälst du davon?
Grüße
Ralf