如何显示过程调用的进度栏 [英] How to display Progress bar for a procedure call
问题描述
我将数据存储在Jtable中,然后逐行获取此数据并将其传递到数据库中的可调用过程(每行1个调用),过程完成后返回消息,此过程几乎耗时每次通话需要1-2分钟,有人可以告诉我如何显示整个过程的单个进度条. (我的意思是所有通话都有1个进度条),我希望在循环结束后完成进度条.
I have data stored in Jtable, and then I am taking this data row by row and passing this data to a callable procedure in database(1 call for each row), and Procedure returns the message once completed, this process takes almost 1-2 min for each call, can someone tell me how can I display a single progress bar for whole process. (I mean 1 progress bar for all the call), I want Progress bar to be finished once loop ends.
我的代码如下:
DefaultTableModel model = (DefaultTableModel) data.getModel();
for (int count = 0; count < model.getRowCount(); count++) {
CallableStatement csmt = con.prepareCall("{call CODE_REVIEW.PRC_WRAPPER_REVIEW(?,?,?,?)}");
String folder=model.getValueAt(count, 0).toString();
String type=model.getValueAt(count, 1).toString();
String name=model.getValueAt(count, 2).toString();
csmt.setString(1,name);
csmt.setString(2,type);
csmt.setString(3,folder);
csmt.registerOutParameter(4,java.sql.Types.VARCHAR);
csmt.execute();
String messege =csmt.getString(4);
}
推荐答案
You can use a SwingWorker
to do the calls in the background and update the progress bar in the Event Dispatching Thread (a.k.a. EDT). Something like this:
SwingWorker<Void, Integer> worker = new SwingWorker<Void, Integer>() {
@Override
protected Void doInBackground() throws Exception {
int processed = 0;
DefaultTableModel model = (DefaultTableModel) data.getModel();
for (int count = 0; count < model.getRowCount(); count++) {
//...
String messege = csmt.getString(4);
processed++;
publish(processed / model.getRowCount() * 100);
}
return null;
}
@Override
protected void process(List<Integer> list) {
progressBar.setValue(list.get(list.size() - 1));
}
};
worker.execute();
看看 Worker Threads和SwingWorker Swing中的并发中的> 部分. 跟踪.
这篇关于如何显示过程调用的进度栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!