我一直在寻找这个问题的答案,并找到了我在我的程序中使用的解决方案。但是,我仍然无法使用该参数。我正在用Java编写Lotus Notes代理,我需要将名为“Session”的Notes对象传递给我的GUI:
这是我的主题类:
public class MyRunnable implements Runnable {
Session par;
public MyRunnable(final Session parameter) {
this.par = parameter;
}
public void run() {
}
}
这是我的代理人类:
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
final Session s = getSession();
EventQueue.invokeLater(new MyRunnable(s){
public void run() {
RemoveFromDenyGUI re = new RemoveFromDenyGUI(this.par);
re.setVisible(true);
}
});
} catch (Exception e){
e.printStackTrace();
}
}
当我想在RemoveFromDenyGUI
类中使用会话时,它表示对象已被删除或回收。
答案 0 :(得分:1)
如果您正在使用Lotus Notes Java API执行多线程应用程序,则应阅读此documentation和此article。
最简单的解决方案是让您的类扩展NotesThread,以便继承API中线程所需的初始化。如果这不是您想要的方式,那么请查看第二个链接中的示例代码,特别是标记为“通过Runnable接口执行线程”一节中的示例(以下再现以防它永远消失),特殊付款注意使用NotesThread和NotesFactory类。
import lotus.domino.*;
public class myClass implements Runnable
{
public static void main(String argv[])
{
myClass t = new myClass();
NotesThread nt = new NotesThread((Runnable)t);
nt.start();
}
public void run() // entry point for thread
{
try
{
Session s = NotesFactory.createSession();
// Operational code goes here
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
答案 1 :(得分:0)
从语言的角度来看,您的代码没有任何问题。当它调用new RemoveFromDenyGUI(this.par)
时,this.par
arg将引用getSession()
调用返回的相同Session对象。
但是Session
是什么? lotus.domino.Session?这是我只能猜到的东西。我无法给你一个真正的答案,但也许我可以让你开始朝着正确的方向前进。
你说,"当我想在RemoveFromDenyGUI类中使用session时,它说对象被删除或回收。"
假设这是一件坏事,那么显然Session对象在Event Dispatch Thread中使用时不再有效(关闭?),否则它只在获取它的线程中有效