swing在Java中等待线程完成
我有一些代码在一个单独的线程中执行下载,创建这些代码是为了让JFrame GUI在下载过程中继续更新。但是,当我使用线程时,目的完全失败了。join(),因为它会导致GUI停止更新。我需要一种方法来等待线程完成,并且仍然更新GUI
你可以在下面搜索框中键入要查询的问题!
我有一些代码在一个单独的线程中执行下载,创建这些代码是为了让JFrame GUI在下载过程中继续更新。但是,当我使用线程时,目的完全失败了。join(),因为它会导致GUI停止更新。我需要一种方法来等待线程完成,并且仍然更新GUI
# 1 楼答案
您可以让下载任务同时向GUI触发事件
例如:
然后要运行它,可以使用Executor(首选方法)或原始线程:
或者
正如评论中所指出的,你通常会使用SwingWorker来做这类事情,但你也可以使用上面概述的手动方法
SwingWorker提供了一个
doInBackground
方法,您可以在其中插入下载逻辑;提供了一个done
方法,您可以在其中插入代码,通知GUI下载已完成;提供了一个get
方法,可以获得doInBackground
的结果(如果有)例如