Другой объект сессионного компонента с сохранением состояния с использованием SwingWorker в Java Swing - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть пользовательский прогрессбарпанель в Swing, где я хочу показать прогресс длительной операции. Итак, я создал двух рабочих-качелей:

  1. Тот, который выполняет фактическую длительную операцию в управляемом компонентом сеансном компоненте с контролем состояния (lengthyTask)
  2. Тот, который запрашивает ssb о прогрессе в цикле на основе флага (statusTask)

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 связывается с JBoss 4.2.3 с использованием EJB3, поиск выполняется с помощью JNDI.

Кто-нибудь имел подобный опыт или понимает, почему объект отличается в каждом потоке? Спасибо за любой вклад!

...