Java线程管理和应用程序流程

All*_*lan 5 java swing multithreading

我有一个Java应用程序从我们的服务器下载信息(实体).我使用下载线程下载数据.

下载过程的流程如下:

  1. 登录 - 下载用户实体
  2. 根据用户实体,下载"社区"实体列表和显示
  3. 基于社区下拉选择,下载并在JTree中显示"组织树"
  4. 根据节点选择,下载类别实体并在下拉列表中显示
  5. 根据类别选择,下载子类别实体并在下拉列表中显示
  6. 基于子类别选择下载大数据集并保存

下载发生在一个线程中,因此GUI不会"冻结".它还允许我更新进度条.

我需要帮助来管理这个过程.主要问题是当我下载实体数据时,我必须找到一种方法来等待线程完成,然后再尝试获取实体并转到应用程序流程中的下一步.

到目前为止,我已经使用模态对话框来控制流量.我启动线程,弹出一个模态,然后在线程完成时处理模态.模态/线程是Observer/Observable,线程在完成并对话框处理后更改了一个集合.显示模式有效地停止了应用程序的流程,因此它可以等待下载完成.

我还尝试将所有工作流程移至Observers.该过程中的所有相关GUI都是Observers.每个更新方法等待下载完成,然后调用下一个自己下载的GUI.

到目前为止,我发现这两种方法产生的代码难以理解.我想"集中"这个工作流程,以便其他开发人员在试图遵循它时不会拔掉头发.

我的问题是:您是否有任何建议/示例可以以产生易于遵循的代码的方式管理此类工作流程?

我知道'easy'是一个相对的术语,我知道我的两个选项已经有效,但我想从其他程序员那里得到一些想法,而我还有时间改变它.

非常感谢你.

Rus*_*ard 0

我认为在最新版本的 Java 中执行此操作的最常见方法是使用 SwingWorker:

http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

它允许您启动后台任务,并为您提供一个在 Swing EDT 上执行的方便的 done() 方法。