我有一个线程正在下载数据,我希望在加载数据之前等待下载完成。 有没有标准的方法可以做到这一点?
更多信息:
我有一个Download类,从URL获取数据(序列化POJO)。 Download是Runnable和Observable。 它跟踪已下载的字节数和下载大小。 我有一个进度条显示用户的进度。 GUI观察Download以更新进度条。
当下载POJO时,我想获取它并移至下一步。 每个步骤都必须等待上一个步骤完成。 问题是我想不到一种方法来暂停我的应用程序以等待下载线程。 下载完成后,我想调用download.getObject()
,它将返回数据作为对象。 然后我可以进行强制转换并继续下一次下载。
我有一个辅助类管理下载的URL并对所有Download调用进行处理。 此调用将调用getObject并进行强制转换。 GUI调用helper.getUser()
。 辅助程序启动线程运行,并希望它“知道”何时完成,以便返回转换后的对象。
有什么建议/示例吗? 我处于设计的初级阶段,因此愿意进行更改。
更新:
我按照http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html#get的方法并使用模式锁定,直到线程完成。 代码非常混乱,我不喜欢这种方法。 我将继续尝试找到处理下载进程工作流程的“干净”方法。
join()
方法。您可以通过创建一个负责下载线程的线程来实现这一点。这实际上只是一个后台工作线程,您可以忘记它的存在。工作线程知道何时下载完成以及在该点要执行的操作。您只需要确保对Swing对象所做的编辑都在Swing线程中完成即可。 - unholysampler