Java 模拟长时间运行的操作

Java 模拟长时间运行的操作,java,swing,jprogressbar,Java,Swing,Jprogressbar,如何模拟长时间运行的数据库操作?我的要求是显示一个带有JProgressBar的对话框,直到操作完成。使用后台线程(如SwingWorker提供的线程)运行一个从1到10的for循环,其中包含一个thread.sleep。然后,如果它是确定模式JProgressBar,您可以通过将10*循环索引传递给进度条来更新它的值(当然要注意在Swing线程EDT上这样做) 编辑: @James Poulson:如果您使用的是SwingWorker对象,您将使用publish/process方法和done方

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

使用后台线程(如SwingWorker提供的线程)运行一个从1到10的for循环,其中包含一个thread.sleep。然后,如果它是确定模式JProgressBar,您可以通过将10*循环索引传递给进度条来更新它的值(当然要注意在Swing线程EDT上这样做)

编辑:

@James Poulson:如果您使用的是SwingWorker对象,您将使用
publish/process
方法和
done
方法在EDT上进行更新。如果您使用的是自己的后台线程,那么一定要将任何一组Swing调用包装在Runnable中,并使用invokeLater在EDT上将其排队。

您可以在任何方法中使用
thread.sleep(milis)
来模拟长时间运行的进程。有那么简单吗:-)@home,没那么简单。您不能在EDT中睡眠。您的意思是?:@mre:您是对的,但仍然可以通过这种方式模拟阻塞数据库请求。我们不知道DB调用是在哪个线程中执行的。@Hovercraft:同样,我同意。尽管如此,我的理解是,OP已经有了一个“阻塞”数据库调用,不管在哪个线程中。因此,如果只是模拟一个长时间运行的进程,将当前线程置于睡眠状态应该可以解决问题(当然可能存在其他问题)。+1完全可以在工作者的后台线程上睡眠以模拟延迟,如图所示。@hovercraftfullofels感谢您的回答。必须问,我如何确保在EDT上更新组件?我是否使用调用器?