哪个更好 - 主循环或单独的线程?

时间:2010-11-26 13:29:41

标签: java design-patterns swing

场景是这样的:我有JFrame的Java swing应用程序。有textarea你可以输入东西,然后你在另一个textarea获得搜索结果,当你选择其中一个结果时,有一个按钮“下载”。这就是问题所在。当您点击“下载”时,应用程序应显示有关下载文件的完整性的信息。我使用一个名为DownloadManager的类扩展Thread来做这个,它会在一段时间内更新信息。但是我担心同步可能会出现问题。有没有标准的方法来更新没有线程的动态信息?在Java swing类中是否有一个mainloop或类似的东西。你是怎么做到的?

3 个答案:

答案 0 :(得分:3)

看看SwingWorker:

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

可能有更好的方法,但这是我在下载内容和更新进度条时用于进度条的内容。

答案 1 :(得分:2)

任何使用Java更新GUI的操作都应该由GUI事件派发线程完成。要强制在此线程中运行方法,您需要使用SwingUtilities.invokeLater。做任何其他事情都可能导致您的GUI挂起,而不是更新或其他陌生感!

这是一个很好的教程,比我更好地描述它:

http://www.javamex.com/tutorials/threads/invokelater.shtml

答案 2 :(得分:2)

同步没有那么多问题。如果在Swing中使用后台线程,请考虑使用SwingWorker