将参数传递给新线程

时间:2014-12-30 13:58:06

标签: java multithreading lotus-notes

我一直在寻找这个问题的答案,并找到了我在我的程序中使用的解决方案。但是,我仍然无法使用该参数。我正在用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类中使用会话时,它表示对象已被删除或回收。

2 个答案:

答案 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中使用时不再有效(关闭?),否则它只在获取它的线程中有效