2011-10-30 89 views
3

如何模拟长时间运行的数据库操作?我的要求是显示一个JProgressBar对话框,直到操作完成。模拟长时间运行的操作

+0

您可以在任何方法内使用'Thread.sleep(millis)'来模拟长时间运行的过程。是不是那么简单:-) – home

+5

@home,并不那么简单。你不能在美国东部时间睡觉。 – mre

+1

你的意思是?:http://stackoverflow.com/questions/1389586/simulation-of-long-running-oracle-db-query –

回答

6

使用后台线程(例如由SwingWorker提供的后台线程)来运行循环内的Thread.sleep从1到10的for循环。那么如果它是一个确定模式的JProgressBar,你可以通过将10 *循环索引传递给进度条来更新它的值(当然,在Swing线程上EDT需要小心)。

编辑:
@詹姆斯Poulson芯片:如果您使用的是的SwingWorker对象,您会使用publish/process方法和done方法对EDT更新。如果你使用自己的后台线程,你肯定会将任何一组Swing调用包装在Runnable中,并使用invokeLater将它放在EDT上。

+0

+1在工作人员的后台线程上睡觉以模拟延迟是完全可以的,如[这里]所示(http://stackoverflow.com/questions/4637215/can-a-progress-bar-be-used-in-a -class-外主/ 4637725#4637725)。 – trashgod

+0

@HovercraftFullOfEels谢谢你的回答。不得不问,我如何确保在EDT上更新组件?我使用invokeLater吗? –

+2

@JamesPoulson:请参阅编辑我的答案。 –