【问题标题】:How to display Progress bar for a procedure call如何显示过程调用的进度条
【发布时间】:2013-12-28 04:17:29
【问题描述】:

我有数据存储在 Jtable 中,然后我逐行获取这些数据并将这些数据传递给数据库中的可调用过程(每行调用 1 次),过程完成后返回消息,这个过程几乎需要每次通话 1-2 分钟,有人可以告诉我如何为整个过程显示单个进度条。 (我的意思是所有通话都有 1 个进度条),我希望在循环结束后完成进度条。

我的代码如下:

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);
}

【问题讨论】:

  • 为此,您必须了解它是什么 EDT(事件调度线程)并使用线程来执行循环并更新 GUI 中的进度条。通常使用 SwingWorker 线程,因为它易于实现。
  • 你应该在这里查看我举的例子:stackoverflow.com/questions/10773552/…

标签: java swing jdbc jtable jprogressbar


【解决方案1】:

您可以使用SwingWorker 在后台进行调用并更新Event Dispatching Thread(又名EDT)中的进度条。像这样的:

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();

查看Concurrency in Swing线索中的Worker Threads and SwingWorker部分。

【讨论】:

  • +1 因为比我快,只是要发布几乎相同的代码示例
  • 谢谢!并在这个好问题中为您 +1 :) @HpTerm
【解决方案2】:

你需要使用SwingWorker来更新UI,而你做长的后台进程。

阅读SwingWorkerConcurency in Swing 的教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多