我在 Swing 中有一个自定义进度条面板,我想在其中显示冗长操作的进度。所以我创建了两个swingworkers:
- 在 bean 管理的有状态会话 bean (longyTask) 中执行实际冗长操作的一种
- 一种基于标志(statusTask)在循环中向 ssb 询问进度的方法
ssb 使用布尔变量来标记是否完成
我的问题是 ssb 接缝是事件调度线程和新创建的线程中的不同对象,即使 ssb 被分配给最终变量。当 statusTask 请求 ssb.isDone() 时,即使我确定冗长的任务已经完成且没有错误,它也会返回 false。
伪示例:
final ProgressPanel p = new ProgressPanel();
final StatefulSessionBean ssb = getSSB();
p.print(ssb);
SwingWorker lengthyTask = new SwingWorker() { public void doInBackground(){p.print(ssb);} };
SwingWorker statusTask = new SwingWorker() {public void doInBackground(){p.print(ssb);} };
lengthyTask.execute();
statusTask.execute();
该代码将打印出不同的对象。顺便说一下,swing 应用程序使用 EJB3 与 JBoss 4.2.3 通信,查找是使用 JNDI 完成的。
有没有人有任何类似的经验或理解为什么每个线程中的对象都不同?感谢您的任何意见!